目录目录 (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;赋值。