次のコード行が 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] の間のスペースは、ローカル変数のみに割り当てられ、関数の引数には割り当てられないと思いました。したがって、上記のコードでは、サイズは 8 だけにする必要があります。つまり、rsp を 32 ではなく 8 だけ減らす必要があります。説明をお願いします。