1、指令编码(硬编码)的结构
除了Opcode之外,其他的都是可选的,所以Opcode是一个硬编码的灵魂
Opcode ModR/M SIB这3个决定了整个指令的长度
Displacement Immediate的长度由前3个(Opcode ModR/M SIB)决定
Opcode决定 ModR/M 的有无
ModR/M决定 SIB 的有无
2、什么是定长指令?什么是变长指令??
定长指令就是Opcode确定了,整个指令的长度就确定了
比如55 就是 push ebp
变长指令就是 仅仅通过 Opcode是无法确定整个指令的长度
3、如何区分指令定长还是变长?
此表是主表,是整个 硬编码 学习阶段最最重要的表 (此表在2541页)
当 Opcode 后面没有 ModR/M 的时候,就是定长指令
当 Opcode 后面有 ModR/M的时候就是变长指令
怎么判断Opcode后面有没有ModR/M呢????
这里有一个小技巧
查文档的时候,当看到E ,G这种东西,Opcode后面肯定有ModR/M,肯定是变长指令
具体查 E G是什么东西,可以查书籍2536页
E是内存地址或寄存器
G是通用寄存器
下面介绍一下Zz表示法
b:代表byte
v: Word, doubleword, quadword
例: Gb,假如G是EAX的话 Gb就是AL