プログラムカウンター

読み:プログラムカウンター
外語: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バイト下と決まっている。

  • 8086 ‐ FFFF0H (F000H:FFF0H)
  • 80286 ‐ FFFFF0H
  • 80386〜 ‐ FFFFFFF0H

アドレス0からはRAMが配置されることを想定しており、それを邪魔しないよう可能な限り高位のアドレスとなるよう配慮した結果らしい。

このアドレスに、実際の初期化処理ルーチンへのジャンプ命令が書かれていることが多い。

用語の所属
レジスター
専用レジスター
PC
関連する用語
マイクロプロセッサー

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club