C言語学習ポータル(無料版) 学習コンテンツ プログラムとは何か 命令実行サイクル(Fetch-Decode-Execute)

📜 プログラムとは何か

命令実行サイクル(Fetch-Decode-Execute)

無料公開版に収録・読む目安 10分

🎯 CPUが命令を1つずつ取り出して実行する繰り返しで動いていることを理解する

CPUは何億個ものトランジスタでできた複雑な部品ですが、やっていることは驚くほど単純です。次の3つを、ひたすら繰り返しているだけです。

  1. Fetch(フェッチ・取り出す) — メモリから次の命令を1つ持ってくる
  2. Decode(デコード・読み解く) — その命令が何をせよという意味かを解読する
  3. Execute(エグゼキュート・実行する) — 実際に計算したり値を移したりする

そして4番目に「次の命令へ進む」があり、また1に戻ります。この輪をぐるぐる回し続けるのがCPUの一生です。

具体例で見る

「3番地の値と4番地の値を足して、5番地にしまう」という処理は、実際には機械語の命令いくつかに分かれます。

C言語で書けばたった1行の c = a + b; が、機械のレベルではこれだけの手数に分解されています。1つの命令はとても小さい——これがCPUの世界観です。

ビット1歩がすごく小さいけど、1秒に何十億歩あるくんだ。だから速く見えるんだよ。

次にどこを実行するか、を覚えている

CPUの中には「次に実行する命令が何番地にあるか」を覚えている専用の置き場があります(プログラムカウンタと呼びます)。命令を1つ実行するたびに、この番号が1つ進みます。

すると、「if文で条件によって処理が分かれる」「ループで前に戻る」といった動きの正体も見えてきます。プログラムカウンタの中身を書き換えて、別の番地へ飛ぶ——ただそれだけのことなのです。

なぜこんなに細かく分けるのか、と思うかもしれません。理由は、部品が単純なほど速く正確に作れるからです。「足す」「比べる」「移す」といった数十種類の単純な命令だけを、極限まで速く実行できるように回路を作る。その代わり、複雑なことは命令をたくさん並べて実現する。この割り切りが、1秒間に何十億回という速度を生んでいます。

大原則: 一度に1つ、順番に

ここから、この先ずっと使う大原則が出てきます。CPUは一度に1つの命令しか実行しない(実際の最新CPUは工夫で同時実行しますが、結果は順番に実行したのと同じになるよう作られています)。

つまりプログラムの動きは、原理的に人間が紙の上で追いかけられるということです。速度でCPUに勝てなくても、正しさは同じように確かめられます。この「紙の上でCPUになる」訓練を、第3トラックで本格的にやります。

クロック周波数3GHzとは、この輪を1秒間に約30億回まわす速さ、という意味です。人間が1歩ずつ追えるのは、せいぜい1秒に1回でしょう。速さでは30億倍の差があります。それでも、追えるかどうかは速さの問題ではありません。時間さえかければ、あなたはCPUとまったく同じ結果にたどり着けます。この事実が、第3トラックの訓練の土台になります。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

CPUしーぴーゆー

コンピュータの頭脳にあたる部品。メモリから命令とデータを取り出し、計算や判断を行って結果をまた書き戻す仕事を、目にも止まらぬ速さで繰り返している。現代のCPUは1秒間に数十億回もこのサイクルを繰り返している。

メモリめもり

プログラムやデータを一時的に保管しておく場所。番地(アドレス)のついた小さな箱がずらりと並んだ、巨大なロッカーのような構造をしている。電源を切ると中身が消えてしまう、いわば一時的な記憶場所にあたる。

機械語きかいご

0と1の並びだけで書かれた、CPUが直接理解できる命令の集まり。人間には読みにくいが、コンピュータが実行できる唯一の言葉にあたる。同じソースコードでも、CPUの種類が変われば生成される機械語も変わってくる。

同じトラックのほかの項目

コンピュータは何をする機械かコンピュータが「超高速だが命令どおりにしか動かない機械」であることを、自分の言葉で説明できる プログラムとは「手順書」であるプログラムが満たすべき3条件(順序・明確さ・有限)を理解し、曖昧な指示との違いを説明できる ソースコードから機械語へ——コンパイルの旅ソースコード・コンパイラ・機械語の関係と、コンパイルという工程の役割を説明できる CPUとメモリの模式図CPUとメモリの役割分担を机の比喩で説明でき、メモリが「番地つきのロッカー」であることを理解する プログラミング言語の地図とCの位置低級言語・高級言語の違いを理解し、数ある言語の中でのC言語の位置づけを説明できる なぜ最初にC言語なのかAI時代にC言語を最初に学ぶ意味を、自分なりの理由として持てるようになる 0と1ですべてを表す——2進数の入口2進数の仕組みを理解し、簡単な2進数と10進数の相互変換ができる
‹ CPUとメモリの模式図 プログラミング言語の地図とCの位置 ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH