プログラムカウンター
読み:プログラムカウンター
外語:PC: Program Counter

 マイクロプロセッサーが、次に命令を読み込むアドレスを保持しているレジスター
 プロセッサーによっては、インストラクションポインター(IP)とも呼ぶ。
目次

概要
 典型的なマイクロプロセッサーでは、リセット時に0にクリアされるか、またはアドレスのテーブルを用意し、そのテーブルから読み出された番地がセットされる。
 従ってプログラムは、前者ならアドレス0から実行が開始され、後者ならテーブルに書き込まれたアドレスから実行が開始されることになる。テーブル式の場合、テーブルのアドレスはCPUごとに規定があり、そのアドレスにはROMを配置するのが一般的である。

特徴

68000シリーズ
 680×0シリーズでは、アドレス0から1023番地までは割り込みベクターテーブルとなっており、32ビットのアドレスが256個存在する。
 このうちベクター0番(アドレス$000)がリセット初期SSP、ベクター1番(アドレス$004)がリセット初期PCとなっており、メモリーに書き込まれたアドレスからプログラム(一般にはBIOSやIOCSと呼ばれるシステムプログラム)が開始される。
 68000シリーズではアドレス0からのページにはROMを配置することもあるが、シャープのX68000シリーズでは、リセット時のみ、$000000‐$00ffffに$ff0000〜のIPLを配置する方法を採用しており、このため、起動時以外は$0からRAMが配置可能となっている。

SuperH
 SuperHシリーズもアドレス0から1023番地までは割り込みベクターテーブルとなっており、32ビットのアドレスが256個存在する。
 SuperHはベクター0番が初期プログラムカウンターとなっており、メモリーに書き込まれたアドレスからプログラムが開始される。
 このため、SuperHはアドレス0からのページにはROMが配置されることが多い。

ARM
 ARMには例外ベクターと呼ばれるテーブルが用意されており、ここにブランチ命令を並べて置くことになる。例えばARMv7ではリセット時のプログラムカウンターのありかは、このテーブルの最初(オフセット0x00)である。
 この配置アドレスは通常は0x00000000だが、一部のARMコアでは0xFFFF0000から開始するように設定できる。0x00000000はノーマルベクターまたはローベクター、0xFFFF0000はハイベクターまたはHivecsと呼ばれている。仕様書によれば、Hivecsの使用はあまり推奨されていないようで、ARMv7-Rでは非推奨で、ARMv7で用いるのであればARMv7-Aを推奨するとしている。
 ROMの場合遅くなりがちなので、通常は別のアドレスにあるROMをリセット時だけ0x00000000からに見せ、その処理にてベクターをRAMに複写し、以降は0x00000000から配置されたRAMを使用する、というような技巧を使う実装も多い。

x86
 x86は、16ビット、32ビット、64ビットと歴史のあるプロセッサーだが、リセット時のプログラムカウンターは、プロセッサーの最上位にある物理アドレスの16バイト下と決まっている。
 アドレス0からはRAMが配置されることを想定しており、それを邪魔しないよう可能な限り高位のアドレスとなるよう配慮した結果らしい。
 このアドレスに、実際の初期化処理ルーチンへのジャンプ命令が書かれていることが多い。

再検索