简单的汇编题 谁能解答一下啊??

来源:百度知道 编辑:UC知道 时间:2024/05/17 21:05:10
从键盘上接收两个一位十六进制数X和Y,然后再输入一个A-D之间的一个字符,按下列要求计算。
a) 当输入字符为A,则计算X+Y,并以十六进制形式显示出来
b) 当输入字符为B,则计算|X-Y|,并以十六进制形式显示出来
c) 当输入字符为C,则计算X*Y,并以十六进制形式显示出来
d) 当输入字符为D,则计算X/Y,并以十六进制形式显示出来

假设用户输入的数字都是有效数字(0-F/A-D) ,X/Y不计小数,
则汇编如下:

Begin: mov ah,1
int 21
cmp al,1b ;ESC 退出
jnz KaiShi
mov ax,0e0d
int 10
mov al,0a
int 10
mov ah,4c
int 21
KaiShi: call YuChuLi
mov bl,al
mov ah,1
int 21
call YuChuLi
mov bh,al
mov ah,1
int 21
cmp al,41
jnz X1
call Jia ;+
jmp Output
X1: cmp al,42
jnz X2
call Jian ;-
jmp Output
X2: cmp al,43
jnz X3
call Chen ;*
jmp Output
X3: call Chu ;/
Output: call Disp
jmp Begin

YuChuLi:cmp al,39 ;预处理
jbe G2
cmp al,61
jb G1
sub al,20
G1: sub al,7
G2: sub al,30
ret

Jia: mov al,bl ;加法
xor ah,ah
add al,bh
ret
Jian: mov al,bl ;减法
xor ah,ah
cmp al,bh
ja ZC
xchg al,bh
ZC: sub al,bh
ret
Chen: mov al,bl ;乘法
xor ah,ah