求高人给这段汇编程序加注释,越详细越好,可追加分数。

2025-02-05 02:56:37
推荐回答(1个)
回答1:

mov al,0
mov ah,01h
int 21h
mov bh,al
mov ah,01h
int 21h
;上面的是输入两个字符!键盘输入数字字符
mov bl,al
mov ax,0
sub bh,30h ;ASCII减去30h就是数字
mov al,bh
mov cl,0ah
mul cl ;高位乘以0a,也就是乘以十
sub bl,30h
add al,bl
;上面是把2个字符转换为10进制的数
mov bl,10h
mov cl,al
mov dl,0
l1:cmp cl,bl
jnae l2
inc dl
sub cl,bl
jmp l1
l2:add dl,30h
mov ah,02h
int 21h
;上面指令是判断输入的数据,如果小于16(10h)的话就直接输出!l2是直接输出的指令
假设是14(e)的话,dl就是0,加上30h,输出高位也就是输出0.
上面这只是输出高4位,假设输入的是19(13h)的话,dl就会加一,这部分就会输出前面的那个1
cmp cl,0ah
jae l3
mov dl,cl
add dl,30h
mov ah,02h
int 21h
jmp e
l3: mov dl,cl
add dl,37h
mov ah,02h
int 21h
上面的指令就是判断低位如果大于10就加37h输出的就是字母,小于十就加30h输出的是0-9的字符
=====
你可以在debug中调试,遇到int指令用p来运行,其他指令用t,可以更好的熟悉这些
但是我觉得这写的不是很好