У 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 Я знаю , как эти соглашения о вызовах в целом различаются, и я знаю, где найти подробности, если мне нужно. Я хочу знать , почему .
Изменить: чтобы узнать, как, см., Например, запись в википедии и ссылки оттуда.