ゼロレジスタ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/08/22 23:17 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2025年8月)
|
![]() |
この記事はカテゴライズされていないか、不十分です。
|
ゼロレジスタ(Zero Register)とは、プロセッサにおいて常に値 0 を返し、書き込みを行っても値が変化しないレジスタのこと。
CDC 6600、System/360、ARM64 他の命令セットアーキテクチャで定義されている。
「ゼロ」という定数が命令中に屡々現れ、例えば「ゼロなら分岐(branch if zero)」のような命令において、命令を最適化して、性能向上に寄与する場合がある。一部のアーキテクチャでは、専用のオペコードや基本命令の特例によってこれを実現するが、それを実装するには命令デコーダにロジックを追加する必要がある。ゼロレジスタを用いれば、新たなオペコードを追加することなく同等の効果を得られるが、そのために 1 つのレジスタを専用に割り当てる必要があり、レジスタ数が限られているアーキテクチャでは不利になる可能性がある。
x86 アーキテクチャはゼロレジスタを持たないが、ARM は ARM64 でゼロレジスタを追加した。RISC-V アーキテクチャでは「x0」というレジスタ名、ABI 名「zero」を持つゼロレジスタが含まれており、その採用理由として「ゼロ専用のレジスタを設けることは、RISC-V ISA の単純化に意外なほど大きく寄与する」と説明されている。
注:これは、レジスタを XOR などでゼロにすることとは異なり、物理ハードウェアとして実装されている[1]。
References
ゼロレジスタ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/16 16:17 UTC 版)
「レジスタ (コンピュータ)」の記事における「ゼロレジスタ」の解説
何を書き込んでもその結果は保存されず、読み出すと常に全ビットがゼロである、というレジスタを持つプロセッサがある。一見意味がないようであるが、RISCアーキテクチャの様に命令セットを単純化した際に、演算命令とゼロレジスタを組み合わせて実質的に別の命令を実現できる。 例えば、加算命令において、A=B+Z (ここでA,Bは汎用レジスタとしZはゼロレジスタとする)に相当する命令をプログラムすると、Bの値がAに入り、BレジスタからAレジスタへの転送(MOVやLD)命令と等価になる。 また、比較命令は、演算そのものは減算命令と同じだが、その演算結果(大小関係や結果がゼロか否か)をフラグに反映させれば目的は達するが減算結果の数値は不要である。この場合に、Z=A-B に相当する命令をプログラムすると、減算に伴いフラグレジスタの値が更新される一方で、減算結果はどこにも保存されず、AレジスタとBレジスタの比較(CMP)命令と等価になる。 その他、アドレッシングにおいて必ずオフセットを指定する必要がある場合にゼロレジスタをオフセットに指定することで、オフセット無しでメモリにアクセスできる。 この様に、ゼロレジスタと演算命令を組み合わせることで、実質的に別の命令と同等の処理を行わせることができる。
※この「ゼロレジスタ」の解説は、「レジスタ (コンピュータ)」の解説の一部です。
「ゼロレジスタ」を含む「レジスタ (コンピュータ)」の記事については、「レジスタ (コンピュータ)」の概要を参照ください。
- ゼロレジスタのページへのリンク