
一、实验目的
学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。
二、示 例
试问如下程序执行到exit时,字单元A、B、C、C+1、C+2中的内容各是什么?
源程序如下:
data segment
a db 0
b db 0
c db 30,40,50
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov al,c+1
add al,c
mov a,al
mov al,c+1
add al,c+2
mov b,al
add c,10
add c+1,20
add c+2,30
exit: mov ah,4ch
int 21h
code ends
end start
注:c db 30,40,50为c=30,c+1=40,c+2=40.
阅读以上程序,分析出结果,并上机验证。
(1)输入以上源程序,以TX4_1.ASM命名。
(2)用MASM 汇编TX3_1.ASM,生成TX4_1.OBJ文件。
(3)用LINK 连接TX3_1.OBJ,生成TX4_1.EXE文件。
(4)用DEBUG调试TX3_1.EXE文件,观测运行结果。
三、实验题
1、求表达式Y=A*X2+B*X+C的值,已知A、B、C分别存放在DATAA、DATAB、DATAC字节单元,X存放在TABL字节单元,结果Y放入RESULT字单元。
要求: ① 在DEBUG下多次修改X的值,观察执行结果Y;
data segment
DATAA db 1
DATAB db 2
DATAC db 3
TABL db 0
RESULT db ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov tabl,al
mov bl,tabl(bl=0=al)
mul bl(al=al*bl=tabl*tabl)
mul dataa(al=dataa*tabl*tabl)
push ax(ax=dataa*tabl*tabl)
mul datab(al=al*datab)
pop bx(bx=ax)
add ax,bx(ax=ax+bx=al*tabl*tabl+al*tabl)
add ax,datac
mov result,ax
exit: mov ah,4ch
int 21h
code ends
end start
② 修改原程序,从键盘上输入X的值,观察执行结果Y。(见书P471)
X=1,放入al中的是1的ASCII值31,所以用sub al,30h还原al的值, mov ds,ax
mov ah,07 (从键盘上输入x的值以ASCII值得形式存入al中)
int 21h
sub al,30h(还原x的值)
mov tabl,al
mov bl,tabl(将输入的x的值赋给bl,al=bl=x)
mul bl(al=bl*al=x*x)
mul data(al=A*al=A*x*x)
push ax
mul datab
pop bx
add ax,bx
add ax,datac
mov result,ax
2、上机完成教材习题3.11(P108),写出正确结果。
四、实验报告
写出程序清单,记录运行结果;总结DEBUG中U、E、D、T、G命令的功能。
U 反汇编字节并显示相应的原语句,其中包括地址和字节值。
E 将数据输入到内存中指定地址。
D 显示一定范围内存地址的内容。
T 从当前段地址开始执行指定的代码数,每执行一次显示所有寄存器(包括标志寄存器)的值。
G 依次运行实验程序。
