多字节加减法程序
- 题目描述
- 参考代码
- 程序分析
编写多字节加/减汇编程序,观察执行情况并分析结果,利用MASM宏汇编程序及TD程序进行调试。
题目描述
编写多字节加法汇编程序:
- 112233445566H + AA9988776655H=?
参考代码
DATA变量定义两个相加数(BUFFER1与BUFFER2)的时候,需要注意的是应该从后往前赋值
DATA SEGMENT
BUFFER1 DB 66H, 55H, 44H, 33H, 22H, 11H
BUFFER2 DB 55H, 66H, 77H, 88H, 99H,0AAH
SUM DB 7 DUP(0)
CONT DB 3
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUFFER1
MOV DI,OFFSET BUFFER2
MOV BX,OFFSET SUM
MOV CL,CONT
MOV CH,0
CLC
GOON: MOV AX,[SI]
ADC AX,[DI] ;将“ADC”改为“ SBB” 即为多字节减法程序
INC SI
INC SI
INC DI
INC DI
MOV [BX],AX
INC BX
INC BX
DEC CL
JNE GOON
MOV AH,4CH
INT 21H
CODE ENDS
END START
如果要执行减法操作,则将“ADC”改为“ SBB” 即为多字节减法程序
程序分析
先来看一下这两个十六进制数的相加的正确结果是多少吧:
112233445566H + AA9988776655H = ?
这样便于我们去验证程序的正确性:
下面我们进入TD一步步分析程序。
首先找到DS段,找到两个待加数:
把两个待加数的低位的偏移地址取到:
BX里存放结果的偏移地址,CL里存放循环次数,12位六进制需要循环3次:
进入主程序,取BUFFER1的低4位放入AX:
将BUFFER2的低4位与AX相加(相当于与BUFFER1的低4位相加),并把结果存入AX:
增加两个待加数的偏移地址,即取下4位:
把运算结果保存到SUM里,此时SUM的低4位保存了运行结果,为了保存下一个运算结果,要使其偏移地址指向下4位:
一次循环结束,外循环次数减1:
判断循环是否结束,循环未结束则继续执行主程序:
如此往复循环,直至CL的值为0,此时运算结果为BBBBBBBBBBBBH,与实际结果一致,故程序正确: