- это пространство для резервирования стека, необходимого для функций менее четырех аргументов?

только что начали изучать сборку X64, и у меня возникли вопрос о функциях, аргументах и ​​стеке. Насколько я понимаю, первые четыре аргумента в функции передаются в RCX, RDX, R8 и R9 регистры (и XMM0-XMM3 для поплавков) в Windows. Таким образом, функция тривиальной добавления с четырьмя параметрами будет выглядеть следующим образом:

add:
   mov r10, rcx
   add r10, rdx
   add r10, r8
   add r10, r9
   mov rax, r10
   ret

Тем не менее, я сталкивался со документацией, которая упоминает это :

как минимум, каждая функция должна резервировать 32 байта (четыре 64 -битные значения) на стеке. Это пространство позволяет регионам передаваться в функцию, которая будет легко скопирована в хорошо известное местоположение стека. Функция CALLEE не требуется пролить файлы входных записей в стек, но бронирование пространства стека гарантирует, что он может при необходимости.

Итак, мне приходится забронировать пространство стека, даже если функции, которые я делаю, принимаю четыре параметра или меньше, или это просто рекомендация?

18
задан jww 16 October 2015 в 02:48
поделиться