运行结果如图:(在32位win7masm5下编译运行通过)
data segment out1 db 0ah,0dh,"Input the first number:$" out2 db 0ah,0dh,"Input the second number:$" newline db 0ah,0dh,"$" data ends ;一位数的加减乘除 ;输入两个数字,保存,运算,输出结果 code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset out1 ;lea dx,out1 ;入口参数为dx,显示第一条提示 mov ah,9 ;使用9号功能调用, int 21h ;执行中断 mov ah,1 ;1号功能调用,输入一个字符 int 21h mov bl,al ;把第一个字符存入bl lea dx,out2 ;显示第二条提示 mov ah,9 int 21h mov ah,1 ;输入第二个字符 int 21h mov cl,al ;将第二个字符存入cl lea dx,newline ;回车换行 mov ah,9 int 21h ;----------------数据输入运算结束----------------------- ;----------------加法运算开始----------------------- mov dl,bl ;显示第一个字符 mov ah,2 int 21h mov ah,2 ;显示加号 mov dl,'+' int 21h mov dl,cl ;显示第二个字符 mov ah,2 int 21h mov ah,2 ;显示等号 mov dl,'=' int 21h ;----------------------- 加法运算 mov al,bl add al,cl sub al,60h mov ah,0 mov dl,10 div dl or ax,3030h ;转换成ASCII码 mov dl,al mov dh,ah mov ah,2 int 21h mov dl,dh mov ah,2 int 21h ;----------------加法运算结束----------------------- lea dx,newline ;换行 mov ah,9 int 21h ;---------------减法显示----------------------- mov dl,bl ;显示第一个字符 mov ah,2 int 21h mov ah,2 ;显示减号 mov dl,'-' int 21h mov dl,cl ;显示第二个字符 mov ah,2 int 21h mov ah,2 ;显示等号 mov dl,'=' int 21h ;------------------------减法操作------------- mov bh,bl ;值1存于bl;值2存于cl sub bh,cl jge l neg bh mov dl,'-' mov ah,02h int 21h l: add bh,30h mov dl,bh mov ah,02h int 21h ;----------------减法运算结束----------------------- lea dx,newline ;换行 mov ah,9 int 21h ;-------------------乘法输出-------------------- mov dl,bl ;显示第一个字符 mov ah,2 int 21h mov ah,2 ;显示乘号 mov dl,'*' int 21h mov dl,cl ;显示第二个字符 mov ah,2 int 21h mov ah,2 ;显示等号 mov dl,'=' int 21h ;--------------------乘法运算开始------------------- sub bl,30h;转换成数字 sub cl,30h mov al,bl;取乘数 mul cl;做乘 aam;调整ah存结果的十位,al存结果的各位 or ax,3030h;转换成ascii mov bh,ah;将结果个位和十位临时保存 mov ch,al mov dl,bh;打印十位 mov ah,02h int 21h mov dl,ch;打印各位 mov ah,2 int 21h add bl,30h;调整回ascii add cl,30h ;---------------------乘法运算结束------------------ lea dx,newline;回车换行 mov ah,9 int 21h ;------------------------除法显示----------------- mov ah,2 mov dl,bl;显示被除数 ;add dl,30h int 21h mov ah,2;显示除号 mov dl,'/' int 21h mov dl,cl;显示除数 ;add dl,30h mov ah,2 int 21h mov ah,2;显示等号 mov dl,'=' int 21h ;------------------------除法运算开始----------------- sub bl,30h;被除数存于bl除数存于cl sub cl,30h;调整为数字 mov ah,0 mov al,bl;准备被除数 div cl;做除 or ax,3030h;调整为ascii mov dl,al;打印商 ;sub dl,30h mov ch,ah mov ah,02h int 21h mov dl,' ';打印空格(为了区分商和余数) mov ah,02h int 21h mov dl,ch;打印余数 mov ah,02h int 21h ;------------------------除法运算运算结束----------------- mov ah,4ch int 21h code ends end start