关于一段很小的汇编程序的问题.

来源:百度知道 编辑:UC知道 时间:2024/06/20 18:56:34
老师布置的一道题目:编一程序,显示AL寄存器中的两位十六进制数。
下面是我编写的.可是执行之后显示的数总是错的.找不出问题在哪里.
求哪位高手帮忙看看啊!
mycode segment
assume cs:mycode
start:
nop
mov al,0b3h
mov cl,2
aa: ror al,1
ror al,1
ror al,1
ror al,1
mov dl,al
and dl,0fh
cmp dl,0ah
jnc a2
a1: add dl,30h
jmp bb
a2: add dl,37h
bb: mov ah,2
int 21h
loop aa
mov ah,4ch
int 21h
mycode ends
end start

帮你改了,能运行成功,错误处给你注释了
mycode segment
assume cs:mycode
start:
nop
mov al,0b3h
mov cl,2
aa: ror al,1
ror al,1
ror al,1
ror al,1
push ax ;你主要错在这,没注意保护AL,后面你调用终端显示,虽然没直接用到AL,但用到AH了,汇编就这样,同一寄存器改变AH就有可能就引起AL值改变
mov dl,al
and dl,0fh
cmp dl,0ah
jnc a2
a1: add dl,30h
jmp bb
a2: add dl,37h
bb: mov ah,2 这地方你用了AH
int 21h
pop ax
loop aa
mov ah,4ch
int 21h
mycode ends
end start