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