Assembly x86 ROR指令是如何工作的?
我的Assembly x86 ROR指令是如何工作的?,assembly,x86,Assembly,X86,我的EAX寄存器包含xxxxxx 9d值,我有以下汇编代码: C0C8 14 --> ROR AL,14 对我来说,这意味着EAX的32位值的最后8位按位旋转14个mod 8=6位置 0x9D = b1001 1101 将转化为 b0111 0110 = 0x76 然而,OllyDbg告诉我EAX=XXXXXX D9,这意味着EAX已经按位旋转了4位 我错在哪里?发布您的完整代码,并附上以下内容: mov al,$9d ror al,14 我得到了预期的76分 编辑
EAX
寄存器包含xxxxxx 9d
值,我有以下汇编代码:
C0C8 14 --> ROR AL,14
对我来说,这意味着EAX
的32位值的最后8位按位旋转14个mod 8=6位置
0x9D = b1001 1101
将转化为
b0111 0110 = 0x76
然而,OllyDbg告诉我EAX=XXXXXX D9,这意味着EAX已经按位旋转了4位
我错在哪里?发布您的完整代码,并附上以下内容:
mov al,$9d
ror al,14
我得到了预期的76分
编辑如果旋转14美元的位置,您将获得d9。发布您的完整代码,并附上以下内容:
mov al,$9d
ror al,14
我得到了预期的76分
编辑如果旋转$14个位置,将得到d9。您尝试将8位寄存器旋转20个位置。这有点多,旋转8产生相同的值。按9旋转与按1旋转相同。等等。因此,处理器将旋转20 mod 8=4个位置。您试图将8位寄存器旋转20个位置。这有点多,旋转8产生相同的值。按9旋转与按1旋转相同。等等。因此,处理器将旋转20个mod 8=4个位置。这是14个十六进制,即20个十进制。请注意:以编译器友好的方式表示旋转的最佳实践,避免未定义的行为:。该答案的代码将使gcc和clang生成一条
ror
指令。这是14个十六进制,即20个十进制。请注意:以编译器友好的方式表达旋转的最佳实践,避免未定义的行为:。这个答案的代码可以让gcc和clang生成一条ror
指令。非常感谢。我的错误是什么?将h14=d20与d14混淆。。。。。。是的,20模8产生4我有时真是个傻瓜!谢谢。我的错误是什么?将h14=d20与d14混淆。。。。。。是的,20模8产生4我有时真是个傻瓜!