0

我正在使用 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
4

1 回答 1

1

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

其次,你只需转移 al

shl al,4

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

于 2013-10-30T07:19:53.490 回答