x86 ROR 指令如何工作?

Ber*_*set 1 x86 assembly

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

C0C8 14 --> ROR AL,14
Run Code Online (Sandbox Code Playgroud)

对我来说,这意味着EAX32 位值的最后 8 位按位旋转 14 mod 8 = 6 个位置

0x9D = b1001 1101
Run Code Online (Sandbox Code Playgroud)

将转化为

b0111 0110 = 0x76
Run Code Online (Sandbox Code Playgroud)

但是,OllyDbg 告诉我EAX = xxxxxxD9,这意味着 EAX 已按位旋转 4 位!

我哪里错了?

Han*_*ant 5

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