assume cs:code,ds:data
data segment
a db 'input the first number( >=0,<10 )',0dh,0ah,'$'
b db 0dh,0ah,'input the second number( >=0,<10 )',0dh,0ah,'$'
d db 0dh,0ah,'chose the operation',0dh,0ah,'1:add 3:sub',0dh,0ah,'$'
e db 3 dup(0),'$'
f db 0dh,0ah,'the result is: ','$'
data ends
code segment
start:
mov ax,data
MOV ds,ax
mov si,0
lea dx,a ;显示字符串:输入第一个数据
mov ah,9
int 21h
mov ah,1 ;读入第一个数据到e[0]
int 21h
mov e[si],al
lea dx,b ;显示字符串:输入第二个数据
mov ah,9
int 21h
mov ah,1 ;读入第2个数据到e[1]
int 21h
mov e[si+1],al
lea dx,d ;显示字符串:提示操作
mov ah,9
int 21h
mov ah,1 ;读入操作数
int 21h
cmp al,33h ;判断是加还是减
jne jia
jian:
mov al,e[si] ;将存的第一个操作数放到al中
mov ah,e[si+1] ;将存的第2个操作数放到ah中
cmp al,ah
jb ok ;如果第1个数小于第2个数则跳转到ok
sub al,ah
add al,30h
mov e[si+2],al
jmp s1
ok:
sub ah,al
add ah,30h ;因为两个操作数相减就会将将30h减掉如:3(33h)-1(31h)=2,这时就要加上一个30h来转化成assic码值
mov e[si+2],ah
mov bh,'-' ;本段将第1个第二数互换相减并在其前面加上一个负号
mov f[16],bh
s1:
lea dx,f ;换行
mov ah,9
int 21h
lea dx,e
add dx,2
mov ah,9
int 21h
jmp k
jia:
mov al,e[si]
mov ah,e[si+1]
add al,ah
sub al,30h ;将两个assic相加就会多出一个30h所以要减去30h
mov e[si+2],al
lea dx,f ;换行
mov ah,9
int 21h
lea dx,e
add dx,2
mov ah,9
int 21h
k:
mov ah,4ch
int 21h
code ends
end start