X86 i386与AMD64的ABI差异

X86 i386与AMD64的ABI差异,x86,abi,x86-64,i386,X86,Abi,X86 64,I386,在哪里可以找到i386和AMD64应用程序二进制接口(ABI)之间的所有数据类型差异 我知道长类型在i386 ABI中是32位,在AMD64中是64位。这是正确的吗?如果您需要ABI的所有详细信息:子程序调用约定,哪些寄存器获得传入的内容,哪些寄存器必须在返回时还原,异常处理——这是完全不同的,您可以从Microsoft为Windows ABI下载一个文档 另一方面,如果您只是对数据类型感兴趣,那么只需几分钟就可以编写一个程序,该程序可以: fprintf (stdout, "size of i

在哪里可以找到i386和AMD64应用程序二进制接口(ABI)之间的所有数据类型差异

我知道长类型在i386 ABI中是32位,在AMD64中是64位。这是正确的吗?

如果您需要ABI的所有详细信息:子程序调用约定,哪些寄存器获得传入的内容,哪些寄存器必须在返回时还原,异常处理——这是完全不同的,您可以从Microsoft为Windows ABI下载一个文档

另一方面,如果您只是对数据类型感兴趣,那么只需几分钟就可以编写一个程序,该程序可以:

fprintf (stdout, "size of int is %d\n", sizeof(int));
fprintf (stdout, "size of long int is %d\n", sizeof(long int));
// etc.
编辑4/7/11以响应:

此链接目前有效。没有承诺MSFT明天不会移动它!或谷歌“应用程序二进制接口网站:microsoft.com”

除Windows以外的所有x86-64操作系统都使用x86-64 System V psABI。看

ABI是由操作系统和编译器定义的,而不是由硬件架构师定义的。例如,由编译器编写者决定C/C++int是32位,而
long int是64位(x86-64 System V)——或者两者都是32位(x64 Windows),或者甚至int是64位,long int也是64位(就像某些Fortran编译器所做的那样)——或者甚至int是64位,long int是128位,或者你可以想象的任何其他组合。英特尔和AMD可以提出建议,但编译器编写者和操作系统供应商可以控制。我建议您下载。他有一本专门介绍ABI及其差异的手册

对于32位模式和64位模式之间的指令集差异,Intel和AMD的指令手册应在介绍卷或指令卷(、或2和3)之后的卷中介绍这一点


另请参阅tag wiki中的其他链接。

所有详细信息都会更好,我在哪里可以获得此文件?还有,你知道为什么它是由微软而不是英特尔或AMD发布的吗?@Jean-Françoisfare这个答案在转到无链接答案之前就已经做过了;然而,更重要的是,有很多不同之处,其中一些非常微妙,在一份经过良好修订、结构合理的文档中解释得更好,比如Anger Fog的作品。