谁能向我解释为什么以下代码行 int main (int argc, char *argv[])
{
int i=17;
int output=0
.....
}
被翻译成以下 x64 汇编代码:
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
movl %edi, -20(%rbp)
movq %rsi,-32(%rbp)
movl $17, -8(%rbp)
movl $0, -4(%rbp)
...
我不明白为什么 SP 减少了 32。寄存器 %edi、%rsi 似乎对应于主代码中未使用的 argc 和 *argv[]。我认为 [%esp, %rbp] 之间的空间仅分配给局部变量而不是函数 args,因此在上面的代码中大小应该只有 8,即 rsp 应该减少 8 而不是 32。有什么解释吗?