ROL AX,8 是 NOP,对吗?

use*_*238 2 x86 assembly

我在 IDA 中遇到了一个奇怪的指令:

ROL AX, 8
Run Code Online (Sandbox Code Playgroud)

这是一个NOP,对吗?AX是一个 1 字节的寄存器,它被循环了 8 个。因此它只是MOV AX, AX

fuz*_*fuz 7

该指令的行为与

XCHG AH, AL
Run Code Online (Sandbox Code Playgroud)

除了它也设置CF为一个未定义的值。这是因为AX是 16 位寄存器。如果这是ROL AL, 8,则您的描述将是准确的,只是ROL AL, 8也设置CF为未定义的值。


zx4*_*485 5

ROL AL,8NOP。而且ROL AH,8也会NOP
AX是一个16位寄存器,因此ROL AX, 16NOP

ROL AX,8切换较低的 BYTEAL和较高的 BYTE AH
这是XCHG AL, AH.

ROL指令也改变了溢出和进位标志,所以它不是一个真正的真实的NOP(见注释)。

  • 根据链接,*对于 ROL 和 ROR 指令,CF 标志的原始值不是结果的一部分,但 CF 标志接收从一端移位到另一端的位的副本。*所以不会CF 是否可能会受到影响,并使“ROL AX,16”、“ROL AL,8”和“ROL AH,8”不是真正的“NOP”? (2认同)