基于8086用汇编语言编写一个加法程序: 1325十9839,用ASCII码的形式将加数与被加数存放在数据区DATA1和DATA2中,并将相加结果显示输出
时间: 2024-02-18 22:03:25 浏览: 77
好的,以下是基于8086用汇编语言编写的加法程序,实现了将1325和9839相加的功能,并将结果以ASCII码的形式存储在数据区DATA3中,并将结果显示输出:
```
.model small
.stack 100h
.data
DATA1 db '1325$'
DATA2 db '9839$'
DATA3 db ' $' ; 用于存储结果,需要预留4个字节的空间
.code
mov ax, @data
mov ds, ax
; 将DATA1和DATA2中的ASCII码转换成数值,并相加
mov si, offset DATA1
mov bl, 10 ; 用于将ASCII码转换成数值
xor cx, cx ; 存储结果的寄存器清零
add_loop1:
mov al, byte ptr [si]
cmp al, '$' ; 如果到达字符串结尾则跳出循环
je add_loop2
sub al, 48 ; 将ASCII码转换成数值
mul bl ; 将前面的结果乘以10
add cx, ax ; 加上当前位的数值
inc si ; 处理下一位
jmp add_loop1
add_loop2:
mov si, offset DATA2
xor bl, bl
add_loop3:
mov al, byte ptr [si]
cmp al, '$'
je add_finish
sub al, 48
mul bl
add cx, ax
inc si
jmp add_loop3
add_finish:
; 将结果转换成ASCII码,并存储到DATA3中
mov si, offset DATA3+3 ; 从最低位开始存储结果
xor bl, bl ; 用于存储当前位的数值
mov dx, 10 ; 用于将数值转换成ASCII码
cmp cx, 0 ; 如果结果为0,则直接存储'0'
jne convert_loop
mov byte ptr [si], '0'
jmp print_result
convert_loop:
xor ax, ax ; 存储商的寄存器清零
div dx ; 将结果除以10,得到商和余数
add al, 48 ; 将余数转换成ASCII码
mov byte ptr [si], al ; 存储当前位的ASCII码
dec si ; 处理下一位
cmp cx, 0 ; 如果商为0,则跳出循环
jne convert_loop
print_result:
; 输出结果
mov ah, 9 ; DOS中断21H的子功能9,用于在屏幕上显示字符串
mov dx, offset DATA3 ; 将存储结果的地址放入DX
int 21H
; 退出程序
mov ah, 4ch ; DOS中断21H的子功能4Ch,用于退出程序
xor al, al ; 返回值为0
int 21H
end
```
说明:该程序将字符串'1325'和'9839'存储在DATA1和DATA2中,然后将它们转换成数值相加,并将结果存储在DATA3中。最后,将结果转换成ASCII码,并使用DOS中断21H的子功能9将结果输出到屏幕上。
阅读全文