加法運算
mov ax,Number1
call Dec_ASCII ;把AX中的二進製有、無符號數轉換成顯式的十進製ASCII碼,並送顯示屏顯示
mov dl,'+'
call enter_Chr ;顯示一個加號
mov ax,Number2
call Dec_ASCII ;顯示第二個數
mov dl,'='
call enter_Chr ;顯示一個等號
mov ax,Number1
add ax,Number2 ;Number1+Number2→AX
call Dec_ASCII ;顯示和
call enter_CTLF ;輸出一個回車、換行
; -----------------------------------------
; 減法運算
mov ax,Number1
call Dec_ASCII ;把AX中的二進製有、無符號數轉換成顯式的十進製ASCII碼,並送顯示屏顯示
mov dl,'-'
call enter_Chr ;顯示一個減號
mov ax,Number2
call Dec_ASCII ;顯示第二個數
mov dl,'='
call enter_Chr ;顯示一個等號
mov ax,Number1
sub ax,Number2 ;Number1-Number2→AX
call Dec_ASCII ;顯示差
call enter_CTLF ;輸出一個回車、換行
; -----------------------------------------
; 乘法運算(請事先算好了,否則,容易導致乘積超過16位寄存器能夠表示的範圍)
mov ax,Number1
call Dec_ASCII ;把AX中的二進製有、無符號數轉換成顯式的十進製ASCII碼,並送顯示屏顯示
mov dl,'*'
call enter_Chr ;顯示一個乘號
mov ax,Number2
call Dec_ASCII ;顯示第二個數
mov dl,'='
call enter_Chr ;顯示一個等號
mov ax,Number1
.IF Signed == 'y' ;有符號數乘法
imul Number2 ;Number1*Number2→AX
.ELSE ;無符號數乘法
mul Number2 ;Number1*Number2→AX
.Endif
call Dec_ASCII ;顯示乘積(假定乘積不超過16位寄存器能夠表示的範圍)
call enter_CTLF ;輸出一個回車、換行
; -----------------------------------------
; 除法運算
mov ax,Number1
call Dec_ASCII ;把AX中的二進製有、無符號數轉換成顯式的十進製ASCII碼,並送顯示屏顯示
mov dl,'/'
call enter_Chr ;顯示一個除號
mov ax,Number2
call Dec_ASCII ;顯示第二個數
mov dl,'='
call enter_Chr ;顯示一個等號
xor dx,dx
mov ax,Number1
.IF Signed == 'y' ;有符號數乘法
idiv Number2 ;Number1/Number2→AX(商),DX(餘數)
.ELSE ;無符號數乘法
div Number2 ;Number1/Number2→AX(商),DX(餘數)
.Endif
call Dec_ASCII ;顯示商數的整數部分
test dx,0ffffh ;判斷餘數是否為0
jz Exit_Proc ;能夠整除,結束程序
push dx
mov dl,'.'
call enter_Chr ;顯示一個小數點
pop dx
mov bp,10 ;乘數
mov cl,Period_Aft ;保留小數位數
xor ch,ch
Dec_Frac: mov ax,dx ;餘數不為0,處理小數部分
mul bp ;餘數乘10,繼續做除法
div Number2 ;除以除數,取商數作為結果的一位小數
push dx
or al,30h
mov dl,al
call enter_Chr ;顯示一位小數
pop dx
test dx,0ffffh ;判斷餘數是否為0
jz Exit_Proc ;能夠整除,結束程序
loop Dec_Frac
call enter_CTLF ;輸出一個回車、換行
; -----------------------------------------
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Code ENDS
END Start ;編譯到此結束 參考鏈接: http://zhidao.baidu/question/96638454.html