汇编指令如何区分寄存器,存储器地址,立即值或偏移参数?

2 parameters x86 assembly instruction-set decoding

我一直想知道,是否有一些看不见的操作码或标志或任何告诉汇编指令如何处理其参数的东西?有点困惑,因为显然相同的指令可以使用不同类型的操作数操作 - 支持寄存器,存储器地址,偏移和立即值.

在汇编程序的"文本表示"中似乎没有任何额外的细节,但是二进制可能存在差异,例如,一些位被切换以便CPU知道使用哪种类型的操作数?

Dev*_*lus 5

指令在硬件中编码.如何做到这一点是特定于CPU的.在x86架构上,您可以使用一些位来定义操作数的地址模式.有关更多详细信息,请参阅英特尔程序员参考手册,其中详细说明了这一点.

有时会有不同操作码和相同效果的指令,在这种情况下,汇编器可以选择一个.

http://www.sandpile.org/x86/opc_rm.htm