处理器如何区分这两条指令?
81/2 iw - 使用随身携带imm16加入r / m16。
81/2 id - 使用进位imm32添加到r / m32。
我在指令中看到的唯一不同的是立即值的大小,这还不够,对吧?我的意思是,如果立即数是两个字节,则指令可能就在它之后,处理器不知道它是4字节的立即数还是2字节和另一条指令。
我是否应该为64位操作添加REX前缀,或者为9-16寄存器添加REX.R?
答案 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
。