硬编码(1)
什么是硬编码
指令编码的结构
每一条指令,最短1字节,最长15字节
1、Intel对指令参数的设计了一种表示方式,格式是Zz一个大写字母加上一个小写字母。
2、大写字母表示寻找方式编码(寄存器,ModR/M,跳转相对地址,16:32地址格式等等),从A-Z共26种.
3、小写字母表示操作数的类型(byte,word,dword,fword等等不定,根据cpu模式或改写指令决定) z有大约十几种表示方式。
4、他们的组合再加上纯寄存器表示了intel的所有操作对象。
经典定长指令上(修改寄存器)
1、PUSH/POP
2.INC/DEC
0x40 - 0x47 INC ERX
0x48 - 0x4F DEC ERX
3、MOV Rb, Ib
0xb0 - 0xb7
这个也是按八位寄存器顺序来的
4、MOV ERX, Id
0xb8 - 0xbF
5、XCHG EAX, ERX
0x90 - 0x97
这里我们看到他只有eax和其他寄存器的交换,可以看出intel设计之初对0号寄存器是有特别照顾的
在定长指令下,cpu看到OPCode就知道了后面有几个数据要读,比如遇到90,就知道后面的都是其他指令码