generated at
関数呼び出しのアセンブリ
コンパイラが関数呼び出しの先頭に出力する定形の命令
関数呼び出し時のアセンブリ言語の出力
s
push rbp // ベースポインタの値をスタックに積む mov rbp, rsp // rspをrbpにコピー。これで関数呼び出し時のスタックポインタを記録できる sub rsp, 8 // rspを進める. 関数の引数に向ける. `8`というのは例.
わざわざ一行目の push rbp のような操作が必要になるのは、関数の中で関数が呼ばれても正しいベースポインタを覚えておくことが出来るようにするため
図とかはベースレジスタを参考



コンパイラが関数呼び出しの末尾に出力する定形の命令
ベースレジスタの中にも書いたが、ネストしながら関数の呼び出しが行われ、それがリターンされていくごとに、rbpをその関数を呼び出した関数のベースポインタに戻してから、その関数を抜ける必要がある
ret はスタックからアドレスを1つポップする命令 ref x86-64の命令
関数fの中で関数gを呼び、今、gの処理が終わり、fに戻ろうとしているところ
s
// ←この行での状態では、rbpは今から抜ける関数gのベースポインタを指している mov rsp, rbp // スタックポインタをrbpの位置に動かす pop rbp // 完全に関数gから抜ける。この後、スタックポインタは今抜けた関数gのリターンアドレスを指している ret // 抜けた関数gのリターンアドレスをpop