例如,MOV之一具有2个版本,一个具有REX,一个不具有(来自Intel的文档):

88 /r MOV r/m8, r8
REX + 88 /r MOV r/m8***, r8***

***In 64-bit mode, r/m8 can not be encoded to access the following byte registers if a REX prefix is used: AH, BH, CH, DH.

据我了解,这两条指令是相同的,除了第二条指令使用一个额外的字节并提供较少的选项...所以基本上它是没有用的。

我想念什么?

最佳答案

这与指令中寄存器的编码有关。 r/m部分中的可用位是从一组寄存器中选择的-这些寄存器根据REX前缀而变化:

可用的没有REX前缀的8位寄存器:



设置了REX前缀的可用8位寄存器:



这就是为什么英特尔文档引起您注意不能选择带有REX前缀集的某些寄存器这一事实的原因。

关于assembly - 在64位模式下仅使用REX前缀的指令有什么意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27667065/

10-08 21:40