A.2.1 寻址方式编码 以下缩写用于记录寻址方式: A (direct Address)直接寻址:指令没有 ModR/M 字节;操作数的地址直接编码于指令中;没 有 SIB 字节.(如 far JMP(EA)) EA 00104000 1 jmp far 001B:00401000 C (Control regs) ModR/M 的 reg 域指定为控制寄存器(如 MOV(0F20,0F22)) 0F20C0 mov eax, cr0 D (Debug regs) ModR/M 的 reg 域指定为调试寄存器(如 MOV(0F21,0F23)) 0F21C0 mov eax, dr0 E 操作码后跟随有一个 ModR/M 字节,操作数为通用寄存器(GPR—General-Purpose Register) 或者一个内存地址.(在 ModR/M 表中的左边栏中查找对应的内存或寄存器)若为内存 地址,该地址通过段寄存器和基寄存器、索引寄存器、比例因子,以及偏移量中的任意部 分计算得出. F (Flag regs) EFLAGS/RFLAGES 寄存器 G (General-purpose regs) ModR/M 为通用寄存器(如,AX(000))(在 ModR/M 表中找顶部的通 用寄存器) I (Immediate data) 立即数:操作数的值被嵌入在指令接下来的字节中。 J 指令中包含一个相对偏移量被加至指令指针寄存器(如 JMP(0E9),LOOP) M (Memory) ModR/M 字 节 可 能 仅 编 码 内 存 操 作 数 ( 如 BOUND,LES,LDS,LSS,LFS,LGS,CMPXCHG8B) N ModR/M 字节的 reg 域指定为紧缩四字的 MMX 寄存器(所谓“紧缩×××数据”是指多个 8/16/32 位的×××数据组合成为一个 64 位的数据: 紧缩字节(Packed Byte): 8 个字节组合成一个 64 位的数据; 紧缩字 (Packed Word): 4 个字组合成一个 64 位的数据; 紧缩双字(Packed Doubleword): 2 个双字组合成一个 64 位的数据; 紧缩 4 字 (Packed Quadword):一个 64 位数据.) O 没有 ModR/M 字节.操作数的偏移被编码为字或双字(依据地址大小属性决定).没有 SIB 字节.(如 MOV(A0-A3)) 如: A000104000 mov al,byteptr[00401000] P ModR/M 的 reg 域指定为紧缩四字的 MMX 寄存器 Q 操作码后跟随一字节 ModR/M 指定操作数,操作数为 MMX 寄存器或者内存地址.若为内 存地址,该地址通过段寄存器和基寄存器、索引寄存器、比例因子,以及偏移量中的任意 部分计算得出. R ModR/M 的 R/M 域可能仅为通用寄存器(如 MOV (0F20-0F23)) S (Segment register) ModR/M 的 reg 域为段寄存器(如 MOV(8C,8E)) U ModR/M 的 R/M 域为 128 位的 XMM 寄存器 V ModR/M 的 reg 域为 128 位的 XMM 寄存器 W 操作码后跟随一字节 ModR/M 指定操作数,操作数为 128 位的 MMX 寄存器或者内存地 址.若为内存地址,该地址通过段寄存器和基寄存器、索引寄存器、比例因子,以及偏移 量中的任意部分计算得出. X 内存寻址为 DS:rSI 寄存器对(如 MOVS,CMPS,OUTS,LODS) Y 内存寻址为 ES:rDI 寄存器对(如 MOVS,CMPS,STOS,SCAS)

A.2.2 操作数类型编码 以下缩写用于记录操作数类型: a 两个单字内存操作数或两个双字内存操作数,依据操作数尺寸属性决定(仅在 BOUND 指 令中使用) b 字节,不论操作数尺寸属性 c 字节或字,依据操作数尺寸属性决定 d 双字,不论操作数尺寸属性 dq 八字(Double-quadword),不论操作数尺寸属性 p 32 位,48 位或者 80 位指针,依据操作数尺寸属性决定 pd 128 位紧缩双精度浮点数 pi 四字 MMX 寄存器(如 mm0) ps 128 位紧缩单精度浮点数 q 四字操作数,不论操作数尺寸属性 s 6 字节或 10 字节伪描述符(pseudo-descriptor) ss 128 位紧缩单精度浮点数的标量部分(scalar element of a 128-bit packed single-precision floating data) si 双字整数寄存器(如 eax) v 字,双字或四字(64 位模式),依据操作数尺寸决定 w 字,不论操作数尺寸 z 在 16 位模式中为字,在 32 位或 64 位环境中为双字