差分
ゼロページ
,'''ゼロページ'''([[英語]]:zero page)とは、一部の[[CPU]]において、アドレス空間の開始アドレスがゼロ番地からはじまる一定範囲を特別な領域としていることをいう。
== 概要 ==
[[MOS6502]]を例にすると、[[インデックスレジスタ]]に0-255の値を指定すると、そのアドレスのゼロページ上のメモリが「256個の仮想的な[[レジスタ]]」として機能し、レジスタを介さずメモリ上で直接演算できるというものである。ゼロページは[[CPU]]の回路規模が小さかった時代に[[レジスタ]]の相対的な不足を補うために考案されたものといえる。
また
* ゼロページへのアクセスは「2バイト長で3クロック」
* 非ゼロページへのアクセスは「3バイト長で4クロック」
という高速化が見込める利点もあった。
ゼロページの採用例としては[[PDP-8]]や[[ファミコン]]などに採用されたMOS6502系の256バイトが有名。
どちらも[[汎用レジスタ]]([[アキュムレータ]])が1個しかないため、ゼロページを使う大前提となっている。
== 近代 ==
ゼロページは超古代のオーパーツで使われた技術であり現在ではほぼ使われていない。
しかし、一部のコンピュータアーキテクチャでは、アドレス空間の先頭が予約されている。
たとえば、[[Intel x86]]では、[[リアルモード]]で実行されている場合に[[割込みテーブル]]の最初の512ワードのアドレス空間が確保される。
また、 [[FreeBSD]]、[[Linux]]、[[Windows]]などでは近代ではゼロページが予約されていて誰も使わない大前提で「[[NULLポインタ]]」としていることが多い。
[[C言語]]でいうとこんな感じである。
#define NULL ((void*)0);
== 関連項目 ==
* [[MOS6502]]
* [[MOS6508]]
[[category: CPU]]
== 概要 ==
[[MOS6502]]を例にすると、[[インデックスレジスタ]]に0-255の値を指定すると、そのアドレスのゼロページ上のメモリが「256個の仮想的な[[レジスタ]]」として機能し、レジスタを介さずメモリ上で直接演算できるというものである。ゼロページは[[CPU]]の回路規模が小さかった時代に[[レジスタ]]の相対的な不足を補うために考案されたものといえる。
また
* ゼロページへのアクセスは「2バイト長で3クロック」
* 非ゼロページへのアクセスは「3バイト長で4クロック」
という高速化が見込める利点もあった。
ゼロページの採用例としては[[PDP-8]]や[[ファミコン]]などに採用されたMOS6502系の256バイトが有名。
どちらも[[汎用レジスタ]]([[アキュムレータ]])が1個しかないため、ゼロページを使う大前提となっている。
== 近代 ==
ゼロページは超古代のオーパーツで使われた技術であり現在ではほぼ使われていない。
しかし、一部のコンピュータアーキテクチャでは、アドレス空間の先頭が予約されている。
たとえば、[[Intel x86]]では、[[リアルモード]]で実行されている場合に[[割込みテーブル]]の最初の512ワードのアドレス空間が確保される。
また、 [[FreeBSD]]、[[Linux]]、[[Windows]]などでは近代ではゼロページが予約されていて誰も使わない大前提で「[[NULLポインタ]]」としていることが多い。
[[C言語]]でいうとこんな感じである。
#define NULL ((void*)0);
== 関連項目 ==
* [[MOS6502]]
* [[MOS6508]]
[[category: CPU]]