一实验目的
,编译,连接和执行的全过程;
.
二实验任务及内容
,输入以下汇编语言源程序
,连接形成可执行文件.
DEBUG 将可执行文件调入,并进行调试.
(1)用 D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址.
(2)用 U 命令对目标代码反汇编,
位置, 并记录这个起始地址.
(3)用 T
:它们是写在什么单元,具体内容是什么; 并判断结果是
否正确.
(4)在子程序 SUB1 的入口处设一断点,用 G 命令执行程序. 在断点处观察堆
栈的内容,比较堆栈的内容和程序返回地址是否一致.
(5)用 E 命令修改单元 A,B 的内容,重新执行程序,并记录结果.
(6)用 M 命令和 A 命令对程序进行修改: 将主程序中最后两条指令(ADD 和
ADC) 修改为一条 CALL SUB1 指令,重新执行程序.
(7)退出 DEBUG.
,把源程序最后一句中的 STAR ,
并用 DEBUG U 命令时,显示的结果与前一次(未加 STAR) 的结果
有何不同?
三画出程序流程图
开始
各段初始化
数据A自乘并保存结果
数据B自乘并保存结果
数据A、B相乘并保存结果
计算完成后,所有结果相加
结束
四给出源程序
DAT SEGMENT ;数据段定义
A DB 20 ;(自定)
B DB 15 ;(自定)
Y DB 3 DUP(0)
Z DB 0,0 ;为各个变量分配内存空间
DAT ENDS
STA SEGMENT STACK ;堆栈段定义
DW 50 DUP(?)
STA ENDS
COD SEGMENT ;代码段定义
ASSUME CS:COD,DS:DAT
STAR PROC FAR
PUSH DS ;ds寄存器保护
XOR AX,AX ;ax寄存器清空,影响标志位
PUSH AX ;ax压栈
MOV AX,DAT
MOV DS,AX ;程序初始化,给DS赋初值
MOV AX,STA
MOV SS,AX ;给SS赋初值
MOV AL,A
MOV Z,AL
MOV Z+1,AL
CALL SUB1 ;将AL中的数据 A自乘
MOV AL,B
MOV Z,AL
MOV Z+1,AL
CALL SUB1 ;将AL中的数据B自乘
MOV AL,A
MOV Z,AL
MOV AL,B
MOV Z+1,AL
CALL SUB1 ;将A和B相乘
ADD WORD PTR Y,AX ;A*A+B*B+2*A*B
ADC BYTE PTR[Y+2],0
RET
STAR ENDP
SUB1 PROC
MOV AL,Z
MOV AH,Z+1
MUL AH ; AX=AH*AL
ADD WORD PTR
微原软件实验A 来自淘豆网www.taodocs.com转载请标明出处.