用汇编语言编写一下程序:在数据段存放2个4位非压缩的BCD码(个位在低地址,千位在高地址),求二个数的和并输出。
时间: 2024-03-19 08:46:02 浏览: 13
好的,以下是汇编程序:
```
.MODEL SMALL
.STACK 64
.DATA
NUM1 DB 01H, 23H
NUM2 DB 04H, 56H
RESULT DB ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, NUM1 ;将第一个BCD码存入AL寄存器
AAM ;将AL寄存器中的BCD码转换为二进制数并存入AH、AL寄存器中
MOV BL, AL ;将AL寄存器中的二进制数存入BL寄存器中
MOV AL, NUM2 ;将第二个BCD码存入AL寄存器
AAM ;将AL寄存器中的BCD码转换为二进制数并存入AH、AL寄存器中
ADD AL, BL ;将两个二进制数相加
AAA ;将结果转换为BCD码
MOV RESULT, AL ;将结果存入RESULT变量中
MOV AH, 09H ;调用DOS中断,输出字符串
MOV DX, OFFSET RESULT
INT 21H
MOV AH, 4CH ;程序结束
INT 21H
MAIN ENDP
END MAIN
```
程序的逻辑是这样的:
1. 将第一个BCD码存入AL寄存器中;
2. 使用AAM指令将AL寄存器中的BCD码转换为二进制数,并存入AH、AL寄存器中;
3. 将AL寄存器中的二进制数存入BL寄存器中;
4. 将第二个BCD码存入AL寄存器中;
5. 使用AAM指令将AL寄存器中的BCD码转换为二进制数,并存入AH、AL寄存器中;
6. 将BL寄存器中的二进制数与AL寄存器中的二进制数相加;
7. 使用AAA指令将结果转换为BCD码;
8. 将结果存入RESULT变量中;
9. 调用DOS中断,输出结果;
10. 程序结束。
需要注意的是,本程序中使用的指令是8086指令集中的指令,如果需要在其他平台上运行,需要对指令集进行相应的修改。