:用汇 编语言编程实现x=a+b。 要求: 1) a, b变量为字节类型; 2) a, b变量值由键盘输入; 3)将计算结果分别用十进制和十六进制显示; 4)可以适当加上提示字符串; 5)计算两个数之和用子程序实现,显示单个字符(或字符串)用宏实现,其余不限。 注意: 1) x变量的定义类型,a+b避免溢出; 22输入输出设备的数据默认类型均为字符类型。
时间: 2024-02-19 18:58:20 浏览: 157
好的,这是一个汇编语言程序,实现了将输入的两个字节类型变量a和b相加,并将结果以十进制和十六进制的形式显示出来的功能。程序中用了子程序和宏来实现。以下是程序代码:
```
.model small
.stack 100h
.data
a db ?
b db ?
x db ?
msg1 db 'Enter the value of A: $'
msg2 db 'Enter the value of B: $'
msg3 db 'The sum of A and B is: $'
msg4 db 'The sum of A and B in hex is: $'
.code
main proc
mov ax, @data
mov ds, ax
; display message to enter A
mov ah, 9
lea dx, msg1
int 21h
; read A from keyboard
mov ah, 1
int 21h
mov a, al
; display message to enter B
mov ah, 9
lea dx, msg2
int 21h
; read B from keyboard
mov ah, 1
int 21h
mov b, al
; call add subroutine
call add
; convert result to decimal and display
mov ah, 0
mov al, x
aam
add ax, 3030h
mov msg3+22, ah
mov msg3+23, al
mov ah, 9
lea dx, msg3
int 21h
; convert result to hex and display
mov ah, 0
mov al, x
mov bh, 10h
convert:
xor ah, ah
div bh
cmp al, 0ah
jl less
add al, 7h
less:
add al, 30h
dec bh
mov msg4+bh, al
cmp bh, 0
jne convert
mov ah, 9
lea dx, msg4
int 21h
mov ah, 4ch
int 21h
main endp
add proc
mov ah, 0
mov al, a
add al, b
mov x, al
ret
add endp
display macro msg
mov ah, 9
lea dx, msg
int 21h
endm
end main
```
程序首先定义了三个变量a、b和x,分别用于存储输入的两个数和它们的和。然后定义了四个提示字符串,分别用于提示用户输入a、b、计算结果和十六进制的计算结果。
在主程序中,先将数据段的地址赋给ax寄存器,再将地址保存到ds寄存器中。然后通过21h中断服务例程调用int 21h,将提示字符串msg1显示到屏幕上,并等待用户输入a的值,将其保存到a变量中。同样的方式获取b的值,并将a和b传递给子程序add进行相加。
在add子程序中,将a和b的值相加,将结果保存到x变量中,并使用ret指令返回到主程序。
主程序继续执行,将x转换成十进制和十六进制,并将其显示出来。其中,将x转换成十六进制的过程用到了宏display。
最后,程序通过int 21h调用21h中断服务例程,退出程序。
希望我的回答能够帮到你!
阅读全文