x86 ROR指令如何工作?

时间:2012-04-06 19:19:23

标签: assembly x86

我的EAX寄存器包含xxxxxx9D值,我有以下汇编代码:

C0C8 14 --> ROR AL,14

对我而言,这意味着EAX的32位值的最后8位按位旋转14 mod 8 = 6位

0x9D = b1001 1101

将转变为

b0111 0110 = 0x76

然而,OllyDbg告诉我EAX = xxxxxxD9,这意味着EAX按位旋转了4位!

我哪里错了?

2 个答案:

答案 0 :(得分:4)

您正在尝试将8位寄存器旋转20个位置。这有点多,旋转8会产生相同的值。旋转9与旋转1相同.Etcetera。因此处理器将旋转20 mod 8 = 4个位置。

答案 1 :(得分:1)

发布您的完整代码:

mov     al,$9d
ror     al,14

我按预期得到76分。

编辑如果您旋转$ 14个位置,您将获得d9。