Windows x64-AMD64和EM64T的区别是什么?

Windows x64-AMD64和EM64T的区别是什么?

晚风撩人 发布于 2017-04-14 字数 258 浏览 1008 回复 1

基于x86处理器上出现的64位扩展指令集被称为x86-64,同时包括了AMD的64位(AMD64)技术和Intel的64位(EM64T)技术。我们在用编译代码C/C++代码的时候选择x64平台就可以了,但是如果是写汇编代码,就应该考虑两者有什么大的区别。请问一下它们在汇编指令上什么大的差别?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

晚风撩人 2017-05-09 1 楼

x64和X32位汇编指令主要是“调用约定,参数传递以及函数返回值”不相同。以及64多了8个通用寄存器:R8、R9、R10、R11、R12、R13、R14、R15。扩展了32位寄存器为64位数RAX、RBX、RCX、RDX、RBP、RSP、RIP。

64位的CPU,Intel和AMD都是遵循IA-64体系架构的,就像32位CPU的IA-32一样。我们经常用到的汇编指令是没什么区别的,只是CPU提供的几个特殊功能上有差别。
常用功能有几个小不同的地方:
1.64位程序中可以调用32位的寄存器,如RAX(64位)、EAX(低32)、AX(低16位)、AL(低8位)、AH(8到15位),相应的有R8、R8D、R8W和R8B。但是不要在程序中使用如AH之类的寄存器,因为在AMD的CPU上这种用法会与某些指令产生冲突。
2.AMD64不支持push 32bit寄存器的指令。我也试过Intel32位下使用push al,pop al会破坏堆栈平衡。所以最好的方法就是32位架构的push、pop使用32位寄存器,64位架构的push和pop都用64位寄存器。这样也不多占用空间,32位堆栈中每个栈帧都是4个字节的,64位都是8个字节的。

另外给你一个x64编程的论坛,非常经典,研究得很透彻:http://www.x64asm.com/AsmBbs/
这个贴是一些精华