Я только начал изучать сборку x64, и у меня возник вопрос о функциях, аргументах и стеке.Насколько я понимаю, первые четыре аргумента в функции передаются в регистры rcx, rdx, r8 и r9 (и xmm0-xmm3 для float) в Windows.Таким образом, тривиальная функция сложения с четырьмя параметрами будет выглядеть следующим образом:
add:
mov r10, rcx
add r10, rdx
add r10, r8
add r10, r9
mov rax, r10
ret
Тем не менее, я натолкнулся на документацию , в которой упоминается это :
Как минимум, каждая функция должна зарезервировать в стеке 32 байта (четыре 64-разрядных значения). Это пространство позволяет легко копировать регистры, передаваемые в функцию, в известное место в стеке. Функция вызываемого абонента не требуется, чтобы вылить параметры входного регистра в стек, но резервирование пространства стека гарантирует, что это возможно при необходимости.
Итак, нужно ли мнезарезервировать место в стеке, даже если выполняемые мной функции принимают четыре параметра или меньше, или это просто рекомендация?