【ぷろぐらむかうんた】
プログラムカウンタ とは?
最終更新:
💡 CPUが命令を実行する位置の目印
CPUが命令を実行する位置を示すレジスタ。命令の長さ、分岐・ジャンプによる変化を、RISC-Vの具体例で解説します。
📌 このページのポイント
- プログラムカウンタは、命令のアドレスを保持するレジスタ
- 命令の個数を数えるカウンターではない
- 順に実行するときの進み方は、命令の長さ等に依存する
- 分岐やジャンプで、実行する位置が変わる
CPUは、どの命令を実行するかどう分かるの?
いつも、次の命令の住所なの?
命令を一つ実行したら、1増える?
CPUの分岐命令等で、条件に応じて実行する位置が変わるよ。図では0x1004の分岐が成立して0x1010へ進む例。条件が成立しなければ続く命令へ進む。ジャンプでは、指定した位置へ移るんだ。
プログラムカウンタがあれば、処理の流れが分かる?
もっと詳しく知りたい人へ
割り込みで、PCは必ずスタックに保存される?
保存先や復帰の仕組みはCPUの仕様によります。「どのCPUでも自動でスタックに積む」とは一般化できません。割り込み・例外による実行位置の変更と、後で戻るための状態の保存を区別して確認します。
図の4バイト刻みは、すべてのRISC-V命令に当てはまる?
この図は32ビットのRV32I基本命令の例です。RISC-Vには16ビットの圧縮命令もあり、対応する構成では命令の長さが混在します。図の進み方を、すべての命令・CPUに当てはめません。
まとめ:ざっくりこれだけ覚えればOK!
「プログラムカウンタ」って出てきたら「CPUが命令を実行する位置を示す目印」と思えばだいたいOK!
📖 おまけ:英語の意味
「Program Counter(PC)」 = プログラムの実行位置を示すレジスタ
💬 ここでのPCはPersonal Computerではありません。命令のアドレスを指す仕組みで、何番目の命令かを単純に数えるものではありません。