0
点赞
收藏
分享

微信扫一扫

汇编语言程序设计之多字节加减法程序


多字节加减法程序

  • ​​题目描述​​
  • ​​参考代码​​
  • ​​程序分析​​

编写多字节加/减汇编程序,观察执行情况并分析结果,利用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一步步分析程序。

汇编语言程序设计之多字节加减法程序_MASM_02

首先找到DS段,找到两个待加数:

汇编语言程序设计之多字节加减法程序_编程_03


把两个待加数的低位的偏移地址取到:

汇编语言程序设计之多字节加减法程序_算法_04


BX里存放结果的偏移地址,CL里存放循环次数,12位六进制需要循环3次:

汇编语言程序设计之多字节加减法程序_算法_05


进入主程序,取BUFFER1的低4位放入AX:

汇编语言程序设计之多字节加减法程序_加减法_06


将BUFFER2的低4位与AX相加(相当于与BUFFER1的低4位相加),并把结果存入AX:

汇编语言程序设计之多字节加减法程序_编程_07


增加两个待加数的偏移地址,即取下4位:

汇编语言程序设计之多字节加减法程序_汇编_08


把运算结果保存到SUM里,此时SUM的低4位保存了运行结果,为了保存下一个运算结果,要使其偏移地址指向下4位:

汇编语言程序设计之多字节加减法程序_编程_09


一次循环结束,外循环次数减1:

汇编语言程序设计之多字节加减法程序_算法_10


判断循环是否结束,循环未结束则继续执行主程序:

汇编语言程序设计之多字节加减法程序_编程_11


如此往复循环,直至CL的值为0,此时运算结果为BBBBBBBBBBBBH,与实际结果一致,故程序正确:

汇编语言程序设计之多字节加减法程序_编程_12


举报

相关推荐

0 条评论