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

时间:2013-08-09 14:15:49

标签: assembly parameters x86 decoding instruction-set

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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