導入
for ループも「本体を実行 → カウンタを増やす → 条件を満たす間ジャンプで戻る」という形で作れます。
説明
C のコード:
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
}
対応するアセンブリ(sum を eax、i を ecx):
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で組む形が基本です。
まとめ
if も for も、正体は cmp と条件ジャンプの組み合わせでした。次章は、関数呼び出しを支えるスタックを見ます。