Почему Windows64 использует другое соглашение о вызовах, чем все другие операционные системы на x86-64?

У 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 .

PS Я знаю , как эти соглашения о вызовах в целом различаются, и я знаю, где найти подробности, если мне нужно. Я хочу знать , почему .

Изменить: чтобы узнать, как, см., Например, запись в википедии и ссылки оттуда.

97
задан JanKanis 13 December 2010 в 15:28
поделиться