1、 建立汇编语言源程序.ASM
建立好的源文件以 EX_1.ASM 为文件名存盘
运行程序,显示如下:
调试程序,用e命令更改第二个字符串内容,再用G命令运行程序,结果输出:MATCH!
如下图所示:
2、完成课堂例题,并用 DEBUG 运行,观察结果。
data segment X db 6 Y db ? data ends code segment assume cs:code,ds:data start:: mov ax,data mov ds,ax mov al,x mov y,5 add y,al mov ah,4ch int 21h code ends end start
提示:运行以上程序,进入调试窗口, 用 U 命令显示程序,找到程序结束处的地址,用 G
命令执行程序,用 D 命令检查数据段中的运行结果。
X db 6 //X初始值为6
Y db ? //Y初始值为?
mov al,x //将X的值,即6传递给AL
mov y,5 //将5传递给y
add y,al //将y与al的值两者相加后,即B传给y
mov ah,4ch //将4C传给AX的高八位,所以最后AX的值由4C和06组成,即4C06
2、学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。
示 例
源程序如下:
data segment a db 10 db一个字节 dw两个字节,一个字 b db 20 c db 30,40,50 //变量名对应了偏移地址,即a,b,c,c+1,c+2 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax //把data段的首地址送给ds mov al,c+1 //把c+1字节地址单元的内容(就是40)送给al,直接寻址 add al,c //实现了c和c+1的求和,即70,放在al中 mov a,al //把计算结果al里面的东西拿出来,放在a中,a=70,即46H mov al,c+1 add al,c+2 实现了c+1和c+2的求和,即90,放在al中 mov b,al 把计算结果al里面的东西拿出来,放在b中,b=90,即5AH add c,10 //c里面的数+10,送在c中,c=40 即28H add c+1,20 //c+1里面的数+20,送在c+1中,c+1=60 即3cH add c+2,30 //c+2里面的数+23,送在c+2中,c+2=80 即50H exit: mov ah,4ch int 21h //退出程序 code ends end start
阅读程序,试问程序执行到exit时,字单元A、B、C、C+1、C+2中的内容各是什么?
字节单元:46 5A 28 3C 50
字单元:5A46 285A 3C28 503C 0050
1、 通过debug命令将上面的程序写入内存,追条执行,根据指令执行后的实际运行情况填空。
MOV AX,0FFFFH MOV DS,AX MOV AX,2200 MOV SS,AX MOV SP,0100 MOV AX,[0] ; AX=C0EA ADD AX,[2] ;AX=C0FC MOV BX,[4] ;BX=30F0 ADD BX,[6] ;BX=6021 PUSH AX ;SP=00FE ; 修改的内存单元的地址是2200:00FE,内容为C0FC PUSH BX ;SP=00FC ; 修改的内存单元的地址是2200:00FC,内容为6021 POP AX ;SP=00FE ; AX=6021 POP BX ;SP=0100 ; BX=C0FC PUSH [4] ;SP=00FE ; 修改的内存单元的地址是2200:00FE,内容为30F0 PUSH [6] ;SP=00FC ; 修改的内存单元的地址是2200:00FC,内容为2F31
2、 x、y、z 均为双精度数,分别存放在地址为X, X+2; Y, Y+2;Z, Z+2的存储单元中,编程实现 x + y + 24 - z → w ,并用W, W+2单元存放w.
假设x,y,z为0101,0202,0303
程序如下:
data segment X dw 01,01 Y dw 02,02 Z dw 03,03 W dw ?,? data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov ax,X mov dx,X+2 add ax,Y adc dx,Y+2 add ax,24 adc dx,0 sub ax,Z sbb dx,Z+2 mov W,ax mov W+2,dx exit: mov ah,4ch int 21h code ends end start
调试截图:
所以W=ax=4C18,W+2=dx=0000
3、 将下面程序补充完整,保存成.asm文件,将其生产可执行文件,运行后观测AX寄存器种的内容是什么。
data segment TABLE dw 10,20,30,40,50 ENTRY dw 3 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov BX,OFFSET TABLE add BX,ENTRY exit: mov ah,4ch int 21h code ends end start
运行后观测AX寄存器中的内容是:4C70