windows – ASM x64中40h REX操作码的用途是什么?

我一直在努力了解AS40 x64指令的0x40 REX操作码的用途.例如,在Kernel32.dll的这个函数序言中:

《windows – ASM x64中40h REX操作码的用途是什么?》

如您所见,他们使用push rbx作为:

40 53      push        rbx 

但仅使用53h操作码(不带前缀)也会产生相同的结果:

《windows – ASM x64中40h REX操作码的用途是什么?》

根据this site,REX前缀的布局如下:

《windows – ASM x64中40h 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位.

点赞