x64英特尔操作码81/2

时间:2015-02-19 06:25:56

标签: 64-bit machine-code

处理器如何区分这两条指令?

81/2 iw - 使用随身携带imm16加入r / m16。

81/2 id - 使用进位imm32添加到r / m32。

我在指令中看到的唯一不同的是立即值的大小,这还不够,对吧?我的意思是,如果立即数是两个字节,则指令可能就在它之后,处理器不知道它是4字节的立即数还是2字节和另一条指令。

我是否应该为64位操作添加REX前缀,或者为9-16寄存器添加REX.R?

1 个答案:

答案 0 :(得分:0)

模式和操作数大小前缀。在16位模式下,81/2将为adc rm16, imm16。在32位或64位模式下,它将是adc rm32, imm32。除非你添加操作数大小覆盖,否则它们会切换位置。

要使它adc rm64, imm32(没有adc rm64, imm64),它需要一个REX.W前缀,REX.R没用,因为没有r操作数,REX.B / X只允许您将扩展寄存器用作rm操作数的(部分),并且不要更改操作数大小。例如,adc r8d, 0xDEADBEEF有效且为41 81 D0 EF BE AD DE