Vol. 2A 2-1 指令格式 这一章详细描述所有Intel 64和IA-32处理器指令格式.保护模式指令,实地址模式以及虚拟8086模式指令格式将在2.1节描述.IA-32e模式及其子模式指令格式将在2.2节描述. 2.1 实模式,保护模式,以及虚拟8086模式指令格式 Intel-64和IA-32架构指令编码是图2-1所示格式的子集.一条指令包括可选的指令前缀(顺序任意),主操作码(最多3字节),由ModR/M和SIB字节(可选) 组成的地址格式描述符(如果需要的话),偏移量(可选)以及立即数(可选). 前缀 主操作码 ModR/M SIB 偏移量 立即数 最多四个 1, 2, 3字节 1 字节 1 字节 1,2,4 1,2,4 前缀,每个 1字节 (可选) (可选) (可选) 字节 (可选) 字节 (可选) 7 6 5 3 2 0 7 6 5 3 2 0 Mod Reg/ Opcode R/M Scale Index Base 图 2-1. Intel 64 和 IA-32 架构指令格式 2.1.1 指令前缀 指令前缀分为四组,每一组包含一些允许的前缀码.对于任何指令,前缀可以从这四组(组1,2,3,4)里的挑选,并且它们不区分次序. • 组1 — 锁定和重复前缀: 2-2 Vo l. 2A 指令格式 • F0H - LOCK • F2H - REPNE/REPNZ,仅用于串操作和I/O指令,也可被用作某些指令的强制性前缀 • F3H - REP或REPE/REPZ,仅用于串操作和I/O指令,也可被用作某些指令的强制性前缀 • 组2 — 段重载前缀: • 2EH—CS 段重载(用于任意分支指令时保留) • 36H—SS 段重载(用于任意分支指令时保留) • 3EH—DS 段重载(用于任意分支指令时保留) • 26H—ES 段重载(用于任意分支指令时保留) • 64H—FS 段重载(用于任意分支指令时保留) • 65H—GS 段重载(用于任意分支指令时保留) — 分支提示: • 2EH—分支不被接受(仅用于Jcc指令中) • 3EH—分支被接受(仅用于Jcc指令中) • 组3 • 66H—操作数大小重载前缀,也可被用作某些指令的强制性前缀. • 组4 • 67H—地址尺寸重载前缀 LOCK前缀(F0H)在多处理器环境下强制执行独占共享内存操作.详见《Instru ction Set Reference, A-M》第三章"LOCK – 断言LOCK#信号前缀". 重复前缀(F2H,F3H)将会重复操作字符串的每一个元素.只有MOVS,CMPS,SCAS,LODS,STOS,INS,OUTS等字符串操作或I/O指令才能使用这些前缀. 对Intel 64 或 IA-32 其他指令使用重复前缀和/或未定义的操作码是被保留的,将会引起不可预知的行为. 某些指令可能使用F2H,F3H作为强制性前缀来表示特...