AMD 有一个 ABI 规范,描述了在 x86-64上使用的调用约定。所有操作系统都遵循它,除了 Windows 有自己的 x86-64调用约定。为什么?
有人知道造成这种差异的技术、历史或政治原因吗? 或者这纯粹是 NIH 综合症的问题?
我理解不同的操作系统对于更高层次的东西可能有不同的需求,但是这并不能解释为什么例如 Windows 上的寄存器参数传递顺序是 rcx - rdx - r8 - r9 - rest on stack
而其他人都使用 rdi - rsi - rdx - rcx - r8 - r9 - rest on stack
。
另外,我知道 怎么做这些呼叫惯例大体上是不同的,如果需要,我知道在哪里可以找到细节。我想知道的是 为什么。
编辑: 有关如何编辑,请参阅例如 维基百科词条和从那里的链接。