如何正确地将值转换为eax?

时间:2013-10-30 02:50:57

标签: assembly x86 bit-shift

我使用的是32位x86。

问题是我无法将位移到左侧。

我想每次读取一个字节并将其放入eax,但我正在搞乱转移。我无法将这些位移到高位。有什么想法吗?

myStr byte "12345678"

mov ecx, offset myStr
mov dl, myStr[ecx]
sub dl,30h ;convert to real digit
mov al, dl
shl al,4
inc ecx

;eax should look like this end of the operation 12345678

1 个答案:

答案 0 :(得分:1)

首先mov al, dl会将整个字节从dl移动到al,而不仅仅是半字节

其次,你只需转移

shl al,4

移位后,剩余的高位字节或eax仍然不受影响。所以你所做的只是按顺序将myStr中的数字移动到al的高半字节。这意味着在每一步之后al将是16,32,48 ...... 128,如果前3个字节eax为0之前,则为eax。最后,eax应该看起来像0xXXXXXX80