当前位置: 代码迷 >> 汇编语言 >> 一个简单的汇编程序解决方法
  详细解决方案

一个简单的汇编程序解决方法

热度:7831   发布时间:2013-02-26 00:00:00.0
一个简单的汇编程序
以下代码是将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
  相关解决方案