解析x86指令格式

详解x86指令格式

格式总览

x86指令格式

Instruction Prefixes: 指令前缀,0到4个字节,可选
Opcode: 操作码,指令的灵魂所在,必须有,1- ,2-,或者3个字节
ModR/M: 1个字节,可选,8位数据,按2:3:3格式分段,Mod(6 7位)/ Reg/Opcode(3 4 5位) / R/M(0 1 2位)Mod和R/M,共5位,结合起来,寻址,Reg/Opcode,一般情况是来确定一个寄存器,特定情况下,是Opcode的补充码
SIB:ModR/M的补充
Displacement: 偏移
Immediate: 立即数

Instruction Prefixes: 分四组,在一条指令中,每组前缀指令最多1个字节,一条指令中,最多4个字节的指令前缀,这4个字节不分前后顺序
Group1:LOCK和REPEAT

lockF0锁地址总线
REPNE/REPNZF2重复指令
REP/REPZF3重复指令

Group2:段前缀指令

CS(2EH),SS(36H),DS(3EH),ES(26H),FS(64H),GS(65H)

Group3:Operand-size override prefix(操作数宽度前缀),值为66H
双向起作用,如果当前系统默认是16位宽度,加了此前缀后,变成32位宽度,反之,亦然。
Group4:地址宽度前缀,值为67H 类似Group3

Opcode决定是否有ModR/M:ModR/M决定是否有SIB

Zz表示法: 大写字母+小写字母表示各种不同的含义,对于含义的定义,参见Intel软件开发人员手册A.2.1 Codes for Addressing Method部分和A.2.2 Codes for Operand Type部分,分别是A-Z,a-z的含义说明。
例如 Opcode=0x00时 查到的指令为 ADD Eb,Gb 首先这是一个ADD指令
E:一个ModR/M字节跟在操作码后面,并指定(详细说明了)操作数
G:ModR/M字节的reg字段选择一个通用寄存器(例如AX(000))
b:一个字节,操作数的宽度

这个Opcode告诉我们,它后边还跟着一个ModR/M字节

以上这些分析,需要查表,表在开发手册里。下一篇着重整理下查表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值