利用汇编语言在软件emu8086编写以下程序:在数据段存放2个4位非压缩的BCD码(个位在低地址,千位在高地址),求二个数的和并输出。
时间: 2024-03-20 10:41:22 浏览: 318
好的,以下是汇编程序的代码:
```
.model small
.stack 100h
.data
msg db 'The sum is: $'
bcda dw 1234h ; 存放第一个BCD码
bcdb dw 5678h ; 存放第二个BCD码
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 获取第一个BCD码的值
mov si, offset bcda
mov ax, [si]
and ax, 0Fh ; 获取个位数
add al, '0' ; 转换为ASCII码
mov [si], al ; 存储个位数
shr ax, 4 ; 获取十位数
add al, '0'
mov [si+1], al ; 存储十位数
shr ax, 4 ; 获取百位数
add al, '0'
mov [si+2], al ; 存储百位数
shr ax, 4 ; 获取千位数
add al, '0'
mov [si+3], al ; 存储千位数
; 获取第二个BCD码的值
mov si, offset bcdb
mov ax, [si]
and ax, 0Fh ; 获取个位数
add al, '0'
mov [si], al ; 存储个位数
shr ax, 4 ; 获取十位数
add al, '0'
mov [si+1], al ; 存储十位数
shr ax, 4 ; 获取百位数
add al, '0'
mov [si+2], al ; 存储百位数
shr ax, 4 ; 获取千位数
add al, '0'
mov [si+3], al ; 存储千位数
; 计算两个BCD码的和
mov si, offset bcda
mov bx, [si] ; BX 存储第一个BCD码
mov si, offset bcdb
add bx, [si] ; 将第二个BCD码加到BX中
mov cx, 4 ; CX 计数器初始化为4,即四个数位
mov si, offset msg ; SI 存储输出信息的地址
output_loop:
mov dl, [bx] ; DL 存储当前计算的数位
sub dl, '0' ; 将ASCII码转换为数字
mov ah, 2
int 21h ; 输出当前数位的值
dec cx ; CX 减一
cmp cx, 0 ; 如果已经计算完所有数位,跳出循环
jle output_done
shr bx, 4 ; 将BX向右移动4位,获取下一个数位
jmp output_loop
output_done:
mov ah, 4ch
int 21h ; 程序结束
main endp
end main
```
上述程序通过对BCD码进行分解和加法运算,实现了对两个BCD码的求和,并将结果输出。程序首先将两个BCD码分解成四个数位,然后将每个数位的值相加,得到最终的和。最后,程序将和输出到屏幕上。
阅读全文