Intel 64/x86_64/IA-32/x86处理器 - 指令格式(7) - 80386/32位指令格式概述

版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/86593933

32-bit Instruction Format

从80386的指令格式可以看出,32位指令的操作码可以是1个字节或者2个字节,还新引入了SIB(即BYTE4)字节。地址位移量和操作数宽度也都升级为32比特位长。

下图来自于Pentium Pro的PRM,严格意义来讲,指令前缀并不是指令的一部分,真正的指令总是从操作码字节开始。在Pentium Pro处理器上,操作码依然是1个或2个字节。

下图来自Intel SDM Vol2(Order#: 253666-020),虽然也是IA32指令格式,最主要的一个变化就是操作码变成了1个,2个或者3个字节。

注:3字节操作码的介绍是从Order: 253667-019附录引入的。这之前的文档都只介绍1字节和2字节操作码。

一条IA指令都是有上图指令格式中的一个子集组合而成的,包括指令前缀,指令操作码,寻址格式指示字节(包括ModR/M字节和SIB字节),位移量字节和立即数字节。只要操作码字节是必需的,其他的字节都是根据指令或程序的需要可选或者要求的。具体如下:

  1. 指令前缀 – 可选的,每个指令前缀占1个字节,最多4字节,即最多可以按任意顺序指定4种不同的指令前缀。所有的指令前缀总共可以分成4组,每条指令前的前缀只能从这4组中各选择1个。换句话说,不能从某一组中选择两个放在一条指令前,对于这样的(奇怪)指令,执行的效果是无定义的,各代处理器的处理方式可能各不相同。
  2. 指令操作码 – 必需的,1个或2个字节。有一些指令可以有多个不同的操作码,每个操作码指示指令的一种格式。
  3. 寻址格式字节 – 按需设置,包括1个ModR/M字节和1个SIB字节,根据指令的格式要求或有或无。
  4. 位移量字节 – 按需设置,可以没有,或者1个,2个或4个字节,存储在指令中。
  5. 立即数字节 – 按需设置,可以没有,或者1个,2个或4个字节,存储在指令中

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/86593933