2.4 指令格式

80386指令编码信息包括操作的声明,操作数的类型以及操作数的位置。如果操作数位于存储器中,指令必须选择,显示的或隐式的,哪个当前可寻址段包含这些操作数。

80386指令由各种要素构成并有着不同的格式。指令的详尽描述在附录B(译者注:附录A ?);指令要素在下面描述。在这些指令要素中,只有一个,操作码,是必须的。其他的要素依据涉及到的特定操作和操作数的类型和位置可有可无。指令要素,以出现的顺序描述如下:

  • 前缀-一个或多个在指令前面的字节,修改指令的动作。应用程序可以使用下面几种前缀:

    1.段重载-显示的声明指令使用哪个段寄存器,从而覆盖80386为指令使用的默认段寄存器。 2.地址大小-在32位和16位地址之间切换。 3.操作数大小-在32位和16位操作数之间切换。 4.重复-用在字符串指令,使指令作用于字符串的每一项。

  • 操作码-声明指令的执行动作。有些操作有不同的操作码,每个声明一个不同的操作。

  • 寄存器声明符-一条指令可以声明1到2个寄存器操作数。寄存器声明符可以出现在相同的位置作为指令码,或作为地址模式声明符。

  • 地址模式声明符-当有这项时,它用来声明操作数是寄存器还是存储器位置;如果位于存储器,声明是否要使用移位,基址寄存器,索引寄存器,以及缩放。

  • SIB(scale, index, base)字节-当地址模式声明符表明要使用索引寄存器来计算操作数地址是,SIB字节被包含在指令中,来编码基地址寄存器,索引寄存器以及缩放因子。

  • 移位-当地址模式声明符表明要使用移位来计算操作数地址时,移位被编码在指令中。移位是一个32位,16位或8位整数。在通常情况下,当移位足够小时使用8位形式的移位。处理器扩展8位移位到16或32位,考虑符号位。

  • 立即数-当有这项时,它直接给出了操作数的值。立即数可以时8,16,32位宽。当8位操作数以某种方式和16位和32位数联合使用时,处理器自动扩展8位操作数,考虑符号位。