当前位置:文档之家› 汇编语言学习知识程序设计实验

汇编语言学习知识程序设计实验

目录目录 (1)实验一利用DEBUG熟悉常用指令的使用 (2)一、实验目的 (2)二、示例 (2)三、实验题 (2)实验二汇编程序和连接程序的使用 (6)一、实验目的。

(6)二、示例。

(6)三、实验题。

(8)实验三顺序结构程序设计 (11)一、实验目的 (11)二、示例 (11)三、实验题 (12)四、实验报告 (15)实验四循环结构程序设计 (16)一、实验目的 (16)二、示例 (16)三、实验题 (18)实验五分支结构程序设计 (21)一、实验目的 (21)二、示例 (21)三、实验题 (22)实验六子程序设计 (29)一、实验目的 (29)二、实验题 (29)实验一利用DEBUG熟悉常用指令的使用一、实验目的熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。

二、示例请分别用一条汇编语言指令完成如下功能:(过程略)。

1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。

ADD AL,[BX][SI]2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。

ADD WORF PTR [0520H],3412H三、实验题1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。

要求输入指令,相应存储单元的内容要事先设置,单步P执行,观察执行结果。

(设置存储器的值)①.MOV AX,1200H②.MOV AX,BX③.MOV AX,[1200H]④.MOV AX,[BX]⑤.MOV AX,1100[BX]⑥.MOV AX,[BX][SI]⑦.MOV AX,1100[BX][SI]⑧ .MOV AX,[BP+SI+04]2、上机调试、验证教材习题3.15。

单步执行、观察运行结果并与自己的判断进行比较。

(1)1234(2)4321(3)CFA0(4)9D60实验二汇编程序和连接程序的使用一、实验目的。

熟悉汇编语言的上机环境,学习EDIT,MASM,LINK程序的使用,掌握建立、汇编、链接、运行汇编语言程序的过程。

二、示例。

试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NO MATCH’。

用串比较功能来完成程序所要求的功能。

上机步骤如下:1、调用 程序建立汇编语言源程序.ASM建立好的源文件以EX_1.ASM为文件名存盘DATA SEGMENTSTRING1 DB 'Visual Basic'STRING2 DB 'Visual Basic'COUNT EQU $-STRING2MESS1 DB 'MATCH!',13,10,'$'MESS2 DB 'NO MATCH!',13,10,'$'DATA ENDScode segmentassume cs:code,ds:data,es:datamain proc farstart::push dssub ax,axpush axmov ax,datamov ds,axmov es,ax;main programmov cx,countlea si,string1lea di,string2cldrepz cmpsbjz mes1 mov dx,offset mess2 jmp disp0mes1:mov dx,offset mess1 disp0: mov ah,9int 21h exit: ret main endp code endsend start修改字符串,使其不同,并对以上源程序重新汇编、连接、运行,结果输出为:NO MATCH!修改前:修改后:三、实验题。

1、上机完成以上示例程序。

2、完成课堂例题,并用DEBUG运行,观察结果。

data segmentX db 6Y db ?data endscode segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov al,x mov y,5add y,al mov ah,4ch int 21h code ends end start 程序:改变后:实验三顺序结构程序设计一、实验目的学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。

二、示例试问如下程序执行到exit时,字单元A、B、D、D+1、D+2中的内容各是什么?源程序如下:data segmenta db 10b dw 20d db 30,40,50data endscode segmentassume cs:code,ds:datastart:mov al,datamov ds,axmov al,d+1add al,dmov a,almov al,d+1add al,d+2mov b,aladd d,10add d+1,20add d+2,30exit: mov ah,4chint 21hcode endsend start阅读以上程序,运行程序并用debug调试分析出结果。

字单元A:4C5A。

字单元B:2B5A。

字单元D:3C2B。

字单元D+1:503C。

字单元D+2:0050。

三、实验题1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DA TAA、DATAB、DATAC 字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。

要求:①在DEBUG下多次修改X的值,观察执行结果Y;②修改原程序,从键盘上输入X的值,观察执行结果Y。

(见书P471)① data segmentdataa db 1datab db 3datac dw 5tabl db 7result dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov al,tablmul almul dataamov bx,axmov al,tablmul databadd ax,bxadd ax,datacmov result,axexit:mov ah,4chint 21hcode endsend start运行结果为16进制的4B,即75,计算正确。

在修改X值为9后,运算结果为71,即113,计算正确。

继续修改X值为3,运行结果为17,即23,计算正确。

②data segmentdataa db 1datab db 3datac dw 5tabl db ?result dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ah,01int 21hsub al,30hmov tabl,almul almul dataapush axmov al,tablmul databpop bxadd ax,bxadd ax,datacmov result,axexit:mov ah,4chint 21hcode endsend start从键盘上输入X值为7,输出结果为4B。

2、上机完成教材习题3.11(P108),写出正确结果。

data segmenttable dw 10,20,30,40,50entry dw 3data endscode segmentASSUME DS:data,cs:codestart:mov ax,datamov ds,axmov bx,offset tableadd bx,entrymov ax,[bx]code endsend startAX=1E00H。

四、实验报告写出程序清单,记录运行结果;总结DEBUG中U、E、D、T、G命令的功能。

U命令的功能:将主存内容按照机器代码形成汇编指令显示;E命令的功能:用于修改主存内容;D命令的功能:显示主存单元的内容;T命令的功能:每执行一条指令就显示运行结果;G命令的功能:从指定地址处开始运行程序,直到遇到断点或者程序正常结束。

实验四循环结构程序设计一、实验目的理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。

二、示例1、单循环程序已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。

【参考程序如下】DSEG SEGMENT;定义段。

DATA1 DB'ABCDEFG3';定义字符串赋值给变量。

DATA2 DB'ABCDEF3G';定义字符串赋值给变量。

CNT DW8;定义变量。

DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG;赋值。

MOV DS,AXMOV DL,31H;赋值。

LEA SI,DATA1;取变量的偏移地址。

LEA DI,DATA2;取变量的偏移地址、首地址。

MOV CX,CNTDEC SI;SI自减。

DEC DI;DI自减。

AGAIN:INC SI;自增。

INC DI;进行比较。

MOV AL,[SI];地址的内容赋值给AL。

CMP AL,[DI];进行比较。

LOOPZ AGAIN;如果相等,循环到AGAIN。

JZ DISP;若相等,则跳转到显示。

DEC DL;DL自减。

DISP: MOV AH,2;赋值。

INT 21H;中断语句。

MOV AH,4CHINT 21HCSEG ENDSEND START输入相同数据时:DSEG SEGMENT;定义段。

DATA1 DB'ABCDEFGG';定义字符串赋值给变量。

DATA2 DB'ABCDEFGG';定义字符串赋值给变量。

CNT DW8;定义变量。

DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG;赋值。

相关主题