本文へスキップ
BecomeCoder

アセンブリ言語コース · 第4章 スタックと関数 · レッスン9

スタック ― push と pop

導入

スタックは、メモリの一部を「積み上げ式(後入れ先出し・LIFO)」で使う領域です。トランプを積んで、上から取るイメージ。rsp(スタックポインタ)が常に「積み上げた一番上」を指しています。

説明

    push    rax           ; rax の値をスタックの上に積む(rsp が 8 減る)
    push    rbx           ; rbx も積む
    pop     rcx           ; 一番上を降ろして rcx へ(さっきの rbx の値)
    pop     rdx           ; 次を降ろして rdx へ(rax の値)
  • push … 値をスタックに積む。x86-64 では rsp8 バイト減り(スタックは下に伸びる)、そこに値を書きます。
  • pop … 一番上の値を取り出してレジスタへ。rsp は 8 バイト増えます。
  • 後入れ先出しなので、raxrbx の順で積むと、取り出しは rbxrax の逆順になります。

スタックは「レジスタが足りないときの一時退避場所」としても使われます。大事な値を push して退避し、あとで pop で戻します。