我一直在努力理解 ASM x64 指令的 0x40
REX 操作码的用途。例如,在 Kernel32.dll 的函数序言中:
如您所见,他们将 push rbx
用作:
40 53 push rbx
但仅使用 53h
操作码(不带前缀)也会产生相同的结果:
根据 this site , REX 前缀的布局如下:
所以 40h
操作码似乎没有做任何事情。谁能解释一下它的用途?
最佳答案
04xh
字节(即 040h
、041h
... 04fh
)确实是 REX 字节。正如您在问题中列出的那样,低半字节中的每一位都有一个含义。值040h
表示REX.W
、REX.R
、REX.X
和REX。 B
都是0
。这意味着添加这个字节不会对这条指令做任何事情,因为你没有覆盖任何默认的 REX 位,而且它不是 AH/BH/CH/DH 的 8 位指令一个操作数。
此外,X
、R
和B
位都对应着一些操作数。如果您的指令不使用这些操作数,则相应的 REX 位将被忽略。
关于windows - ASM x64 中 40h REX 操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260055/