Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86 ROR指令是如何工作的?_Assembly_X86 - Fatal编程技术网

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我有时真是个傻瓜!