Соглашения о вызовах функций ассемблера Intel x86_64 (linux, windows), аргументы стека, манипулирование стеком
Я вызываю ассемблерную функцию из C (отдельный asm-файл) и передаю ей 6 аргументов-указателей.
В Linux(с использованием Nasm) соглашение о вызовах: rdi, rsi, rdx, rcx, r8, r9 и остальное в стеке. В Windows (с использованием Masm) соглашение о вызовах: rcx, rdx, r8, r9 и остальное в стеке.
Как я могу решить, что основано на аргументах стека на обеих платформах? Я прочитал 64 abi и Microsoft MSDN, но не вижу четкого ответа, как использовать эти аргументы, все мои попытки заканчивались ошибкой сегментации.
Другой вопрос: нужно ли это делать в MASM:
push rbp
mov rbp, rsp
в начале моей функции сборки?(и, конечно, поменять ее в конце).