stack segment para stack 'stack'
db 256 dup(00)
stack ends
data segment para stack 'data'
a db 'error!','$'
code segment para public 'code'
assume cs:code
main proc far
mov ax,data
mov ds,ax
mov dh,4
k7:
call getchar
mov bh,al
call getchar
mov ah,bh
call asctohex
mov bl,al
call getchar
mov cl,al
call getchar
mov bh,al
call getchar
mov ah,bh
call asctohex
mov bh,al
call getchar
mov al,bl
mov ah,0
cmp cl,'+'
jz k1
cmp cl,'-'
jz k2
cmp cl,'*'
jz k3
cmp cl,'/'
jz k4
lea dx,a
mov ah,09h
int 21h
k1:add al,bh
jmp k5
k2:sub al,bh
jmp k5
k3:mul bh
jmp k5
k4:div bh
k5:mov ch,al
mov al,ah
call hextoasc
mov dl,ah
call dispchar
mov dl,al
call dispchar
mov al,ch
call hextoasc
mov dl,ah
call dispchar
mov dl,al
call dispchar
mov dl,0dh
call dispchar
mov dl,0ah
call dispchar
dec dh
cmp dh,0
jz k6
jmp k7
k6:mov ah,4ch
int 21h
main endp
getchar proc near
mov ah,01h
int 21h
ret
getchar endp
asctohex proc near
cmp al,41h
jc asc1
sub al,07h
asc1:sub al,30h
cmp ah,41h
jc asc2
sub ah,07h
asc2:sub ah,30h
shl ah,1
shl ah,1
shl ah,1
shl ah,1
add al,ah
ret
asctohex endp
hextoasc proc near
mov ah,al
and al,0fh
cmp al,0ah
jc hex1
add al,07h
hex1:add al,30h
shr ah,1
shr ah,1
shr ah,1
shr ah,1
cmp ah,0ah
jc hex2
add ah,07h
hex2:add ah,30h
ret
hextoasc endp
dispchar proc near
push ax
mov ah,2
int 21h
pop ax
ret
dispchar endp
code ends
end main
运行的结果有错误,块嵌套不匹配。