汇编语言使用宏,实现两个字节压缩BCD数相加

汇编语言使用宏,实现两个字节压缩BCD数相加

实验原理:

BCD码有两种形式,即压缩BCD码和非压缩BCD码。压缩BCD码用4位二进制数表示一位十进制数,一个字节表示两位十进制数,如:96D表示成 1001 0110B=96H。
算法思想:将2字节的BCD码分为2个单字节数相加,从低字节开始,进行2次循环操作,注意每次相加后必须进行BCD修正。
汇编语言使用宏,实现两个字节压缩BCD数相加_第1张图片

实验步骤:

1、使用记事本等编辑软件编写程序源代码,并保存为asm文件。
以下为程序源代码:

DATA SEGMENT
BCD1 DB 76H,54H
BCD2 DB 49H,37H
SUM DB 2 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
	  LEA SI,BCD1
	  LEA BX,BCD2
	  LEA DI,SUM
	  CLC
BCDADC MACRO P1,P2,P3
	  MOV AL,P1
	  ADC AL,P2
	  DAA
	  MOV P3,AL
	  ENDM
	  BCDADC [SI],[BX],[DI]
	  INC SI
	  INC BX
	  INC DI
	  BCDADC [SI],[BX],[DI]
	  MOV AH,4CH
	  INT 21H
CODE ENDS
	 END START

2、使用DOSBOX软件搭建汇编环境,调用masm和link程序,将源代码编译链接成可执行程序(bcd.exe)。
3、运行bcd.exe,查看程序运行情况及结果检验
在DOS环境中运行debug bcd.exe,运用debug的u,g,d,r,t调用功能,即可查看检验程序运行状况。
首先调用反汇编指令u查看每条代码的代码段偏移地址
汇编语言使用宏,实现两个字节压缩BCD数相加_第2张图片
找到已初始化完成语句LEA SI,BCD1,该语句对应的偏移地址为0005,
再调用运行命令g,执行g5 ,并调用显示内存单元内容的命令D (d0)查看内存单元内容
汇编语言使用宏,实现两个字节压缩BCD数相加_第3张图片
蓝框中分别为被加数BCD1和加数BCD2的BCD码值5476和3749,橙框中为和SUM的存储单元,预设值分别为0000。
再次调用反汇编指令u查看后续代码的代码段偏移地址,找到主程序已运行完毕的语句MOV AH,4CH,该语句对应的偏移地址为0058
汇编语言使用宏,实现两个字节压缩BCD数相加_第4张图片
再调用运行命令g,执行g0046,并调用显示内存单元内容的命令D (d46)查看内存单元内容
汇编语言使用宏,实现两个字节压缩BCD数相加_第5张图片
和SUM中的值为9225,刚好为5476与3749相加的结果,运行结果正确。

你可能感兴趣的:(汇编语言)