;将键盘输入的两个5位十进制数相加,在屏幕上显示相加的结果。
;要求:1.显示格式:被加数+加数=相加的结果;2.考虑运算结果最高位有进位的情况。3.输入和显示分别用子程序实现。
strout macro string ;利用9号DOS功能调用完成字符串显示的宏
mov ah,9
lea dx,string
int 21h
endm
c_show macro char
mov ah,2
mov dl,char
int 21h
endm
crlf macro ;完成回车换行的宏
mov ah,2
mov dl,0dh ;回车
int 21h
mov ah,2
mov dl,0ah ;换行
int 21h
endm
data segment
data1 db 5 dup(0) ;存放被加数
db '+','$'
data2 db 5 dup(0) ;存放加数
db '=','$'
data3 db 5 dup(0) ;存放相加的结果
db '$'
mess1 db 'input data1:$'
mess2 db 'input data2:$'
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax ;数据段加载
call input
call output
mov ax,4c00h
int 21h ;程序结束返回
input proc ;完成两个5位十进制数输入的子程序
strout mess1 ;被加数输入提示
mov cx,5 ;利用1号DOS功能调用循环5次完成被加数输入存放到data1
lea si,data1
x1:
MOV AH,1 ;输入被加数的一位
INT 21H
MOV [si],AL
inc si
loop x1
crlf ;回车换行
strout mess2 ;加数输入提示
;完成加数输入存放到data2
mov cx,5
lea si,data2
x2:
mov ah,1
int 21h
mov [si],al
inc si
loop x2
crlf ;回车换行
ret
input endp
output proc ;完成两个5位十进制数相加和显示的子程序
;显示被加数+
strout data1
;显示加数=
strout data2
;完成两个5位ascii码表示的十进制数相加,并将结果转换为相应的字符存到data3
mov cx,5
lea si,data1+4 ;si指向被加数的个位
lea di,data2+4 ;di指向加数的个位
lea bx,data3+4 ;bx指向和的个位
clc
x3:
mov al,[si]
adc al,[di]
aaa
pushf
add al,30h
popf
mov [bx],al
dec si
dec di
dec bx
loop x3
jnc x4 ;5位相加后没有进位转到显示相加结果
;有进位显示1
mov ah,2
mov dl,'1'
int 21h
x4: strout data3 ;显示相加的结果
ret
output endp
code ends
end start