IA-32指令集详解
1. 指令格式与编码概述
指令格式与编码涉及多种因素,如寻址模式、操作数数量、寄存器数量、操作数来源等。指令长度有固定和可变两种类型。在固定长度指令集中,所有指令长度相同;而IA - 32指令集采用可变长度指令,以适应指令的复杂性。
1.1 指令前缀
IA - 32架构中指令长度在1到16字节之间,指令有四种可选前缀,每种前缀占一个字节,且可按任意顺序组合使用:
-指令前缀:如rep、repe/repz、repne/repnz和lock。其中,三个重复前缀用于重复执行指令,lock前缀在多处理器系统中确保对共享内存的独占访问。
-段超越前缀:用于覆盖默认的段关联。例如,默认访问数据的段是DS,可使用段前缀进行覆盖,可用的段超越前缀有CS、SS、DS、ES、FS和GS。
-地址大小超越前缀:可覆盖默认的地址大小。D位指示默认的地址和操作数大小,D位为0表示默认地址和操作数大小为16位,D位为1表示32位。该前缀可在16位和32位地址大小之间切换。
-操作数大小超越前缀:允许从默认操作数大小切换到另一种。例如,在16位操作数模式下,通过该前缀可使用32位寄存器。
1.2 通用指令格式
通用指令格式由操作码(Opcode)、可选的地址指定符(包含Mod - R/M字节和SIB字节)、可选的位移量(Displacement)和立即数(Immediate)字段组成:
-操作码(Opcod