以下代码是将al与bl中的数相加放入al,然后将al中的和用16进制数输出,按道理应该输出60h,但是输出的却是63h,请问错在哪里?谢谢
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov al,28
mov bl,68
add al,bl
mov ch,2
rotate: mov cl,4
rol al,cl
mov bl,al
and bl,0fh
add bl,30h
cmp bl,3ah
jl printit
add bl,7h
printit:mov dl,bl
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
prognam ends
end
------解决方案--------------------------------------------------------
AX=0236 BX=0036 CX=0104
此时AX 的值也发生了变化 0206--0236,所以输出结果才会是63,
可能是编译器的问题,具体我也不清楚,AX这个寄存器值老是变化不适合储存数据,修改方法很简单,把所以的AL很AB交换一下就好了,具体程序如下
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov al,28
mov bl,68
add bl,al
mov ch,2
rotate: mov cl,4
rol bl,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit:mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
ret
main endp
prognam ends
end