首先,64Bit Mode的指令格式,基础是IA32 Mode的指令格式,二者的主要区别在于REX Prefix的加入,也就是intel实际上是在IA32的指令基础上扩展成的64Bit Mode指令.
所以看这篇文章之前必须了解IA32的编码,如果不了解可以看我写的IA32指令格式文章,链接 https://blog.csdn.net/ross1206/article/details/81661804
64 Bit-Mode SMD指令格式
- REX Prefix
0x40 – 0x4F 都是REX prefix
其中REX prefix的结构如下图所示
可见,其实REX Prefix就是对ModR/M和SIB(如果存在)的扩展
w位来指定到底是32位还是64位的操作数据的宽度;
R来扩展ModR/M中的reg域;
X来扩展SIB中的index
B来扩展ModR/M中的rm或者SIB中的base,取决于是否有SIB
以下的图示更加直观的说明以上的工作方式