无题
参考
《x86_x64体系探索及编程》
《Intel 开发手册》
x64与x86指令架构的区别
1.寄存器区别
在x86中通用寄存器:
在x64中的通用寄存器:
新增加了R8R15:64位(XMM8。多用于多媒体。Rxx
)、32位(RxxD
)、16位(RxxW
)、8位(RxxB
)
新增加的8位寄存器:spl,bpl,sil,dil
新增加的9个128位的浮点寄存器:XMM0
x64位没有pushad/aq这些指令,因此x64想要保存堆栈只能依次PUSH来保存堆栈和寄存器环境。
2.地址差别
x64中,线性地址中只有48位有效:0x0~0xFFFFFFFFFFFF
其中,0x0-0x700000000000是UserAddress(用户地址),而0x700000000000-0xFFFFFFFFFFFF是内核空间。
高16位必须要么全是0,要么全是1,这种形式的地址被称为canonical地址
然而,在x64 体系里只实现了48.位的 virtual address,高 16 位被用做符号扩展。
与canonical地址形式相对的是 non-canoncial地址形式,如下所示。在64位模式下
non-canonical地址形式是不合法的。(符号扩展位出现了问题)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Safety-Blog!