本文へスキップ
BecomeCoder

アセンブリ言語コース · 第3章 制御構造 · レッスン8

ループをアセンブリで

導入

for ループも「本体を実行 → カウンタを増やす → 条件を満たす間ジャンプで戻る」という形で作れます。

説明

C のコード:

int sum = 0;
for (int i = 1; i <= 5; i++) {
    sum += i;
}

対応するアセンブリ(sumeaxiecx):

    mov     eax, 0        ; sum = 0
    mov     ecx, 1        ; i = 1
loop_start:
    cmp     ecx, 5        ; i と 5 を比較
    jg      loop_end      ; i > 5 なら抜ける
    add     eax, ecx      ; sum += i
    inc     ecx           ; i++
    jmp     loop_start    ; ループ先頭へ戻る
loop_end:
    ; ここで eax = 15(1+2+3+4+5)
  • ループは「条件チェック → 本体 → 戻る」の繰り返し。jmp loop_start で先頭に戻るのがループの本体です。
  • 抜ける条件(i > 5)を先頭で判定し、満たしたら loop_end へ。
  • x86 には専用の loop 命令(ecx を自動で減らす)もありますが、上のように cmp+jmp で組む形が基本です。

まとめ

iffor も、正体は cmp と条件ジャンプの組み合わせでした。次章は、関数呼び出しを支えるスタックを見ます。