在CSAPP,3.7.5寄存器中的本地存储一书中,有一个调用函数:
long P(long x, long y)
{
long u = Q(y);
long v = Q(x);
return u + v;
}
,调用函数的生成汇编代码为:
P:
pushq %rbp
pushq %rbx
subq $8, %rsp Align stack frame
movq %rdi, %rbp
movq %rsi, %rdi
call Q
movq %rax, %rbx
movq %rbp, %rdi
call Q
addq %rbx, %rax
addq $8, %rsp
popq %rbx
popq %rbp
ret
我无法理解第3行subq $8, %rsp
。这本书说它用于对齐堆栈框架。为什么机器在这里对齐堆栈框架?