📄 suanshu.asm
字号:
data segment
sum dw 0
ten db 10
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,0
mov cl,0
printin: ;录入字符存入al
sub dx,dx
mov ah,01
int 21h
cmp al,'='
jz printout
cmp al,'+'
jz zadd
cmp al,'-'
jz zsub
sub al,30h
cmp al,9
ja exit
cmp al,0
jb exit
mov dl,al
mov ax,bx
mul ten
mov bx,ax
add bx,dx
jmp printin
zadd:
call yunsuan
mov cl,0 ;运算返回后设当前标志位为0
jmp printin
zsub:
call yunsuan
mov cl,1 ;运算返回后设当前标志位为1
jmp printin
printout:
call yunsuan
mov ax,sum
cmp ax,0
jl fushu
call bindec
jmp exit
fushu:
mov bx,ax
mov dl,2dh
mov ah,02
int 21h
neg bx
mov ax,bx
call bindec
exit:
mov ah,4ch
int 21h
yunsuan proc near ;根据标志位cl,把录入的数字(bx)算入sum
cmp cl,0
jz addsum
subsum:
sub sum,bx
jmp chuqv
addsum:
add sum,bx
chuqv: sub bx,bx
ret
yunsuan endp
bindec proc near ;将二进制数转换为十进制并输出
sub cx,cx
divh:
mov cl,100
cmp ax,cx
jb divt
div cl
mov dl,al
mov bl,ah
add dl,30h
mov ah,02
int 21h
mov al,bl
cmp bl,10
jae divt
mov dl,30h
mov ah,02
int 21h
mov al,bl
divt:
and ax,00FFh
mov cl,10
mov ch,al
cmp al,cl
jb direct
div cl
mov dl,al
mov ch,ah
add dl,30h
mov ah,02
int 21h
direct:
mov dl,ch
add dl,30h
mov ah,02
int 21h
ret
bindec endp
code ends
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -