プログラムカウンタ【program counter】プログラムレジスタ
別名 :PCレジスタ/命令アドレスレジスタ/instruction address register/命令ポインタ/instruction pointer/インストラクションポインタ/IPレジスタ/逐次制御カウンタ/SCC/Sequential Control Counter

レジスタはCPU内部にある高速な記憶回路で、プログラムカウンタはそのうちの一つである。CPUがプログラムを実行する際、メモリ上に配置された機械語命令をプログラムカウンタが指し示すアドレスから順に読み出す。命令を一つ実行するごとに、プログラムカウンタの値は次の命令の先頭アドレスへと更新される。命令長が固定のCPUでは一定値を加算し、可変長命令を採用するCPUでは読み込んだ命令のサイズ分だけ値を進める。
条件分岐命令やジャンプ命令が実行された場合、プログラムカウンタは加算による更新ではなく、指定された別のアドレスへ直接書き換えられる。これによりプログラム中での命令の実行順序が変わり、ループや条件による分岐が実現できる。関数呼び出しでは呼び出し先のアドレスへ移動し、処理が終わると保存しておいた復帰先アドレスへ戻る。こうした処理もプログラムカウンタの書き換えによって行われる。
プログラムカウンタはCPUが自動的に管理するものであり、通常は利用者やプログラマが直接操作するものではない。ただし、x86系やARM系など一部のアーキテクチャでは、特定の命令を通じて間接的に参照または変更できる場合もある。機械語レベルのデバッグや異常終了時の解析では、プログラムカウンタの値を確認することで、どの命令を実行中だったかを特定できる。
マルチタスクOSでは、複数のプロセスやスレッドを切り替えながら並行して実行するため、実行プログラムの切り替え(コンテキストスイッチ)の際にプログラムカウンタの値を保存し、再開時に復元する処理が行われる。これにより、切り替え前の実行位置から処理を再開できる。
関連用語
他の辞典等による「プログラムカウンタ」の解説 (外部サイト)
- ウィキペディア「プログラム・カウンタ」
- 情処用語辞典「プログラムレジスタ」
- Programming Place Plus 用語集「プログラムカウンタ」
- WhatIs.com (英語)「program counter」
- Techopedia (英語)「Program Counter」
- PC Magazine (英語)「program counter」