レジスタ(register)はコンピュータのプロセッサなどが内蔵する記憶回路で、制御装置や演算装置や実行ユニットに直結した、操作に要する速度が最速の、比較的少量のものを指す。一般に、論理回路において、フリップフロップなどにより状態を保持する装置をレジスタと呼ぶ。コンピュータにおいては、プロセッサが内蔵しているそれを指す。プロセッサには、プログラムが読み書きできるレジスタ以外に、プロセッサ自身が動作するためのレジスタがあり、内部レジスタなどと呼ばれる。論理回路において使われるレジスタという用語としては、たとえばレジスタ転送レベルなどがある。プロセッサ内部のレジスタは、計算結果を一時的に保持したり、RAMやROMなどのメインメモリを読み書きする際のアドレスを保持したり、プロセッサや周辺機器の動作状態を保持・変更したりする。プロセッサの動作とは、極端にいえば、プログラムコードに従ってメインメモリとレジスタの間でデータを移送することだと表現できる。プロセッサ内部にはたいてい数個から数十個のレジスタがあり、内部バスや演算回路などと密接に結びついているため、高速に動作する。プロセッサについて「○○ビットプロセッサ(あるいは○○ビットCPU、○○ビットDSPなど)」と表現する場合、その目安の一つがレジスタの幅、特にそのプロセッサの汎用レジスタの幅である。また、MC68000のようにプロセッサ自体の設計は32ビットだが外部データバスは16ビット、といった設計の場合、「内部32ビット・外部16ビットCPU」のように言うこともある。こだわる人もいるが、そもそも厳密に定義できるわけでもないのでこだわる意味はない。プロセッサの内部にどのようなレジスタがあるかということは、そのプロセッサの構造(アーキテクチャ)を示す最も重要な点である。プロセッサ内部のレジスタには、用途に応じていくつかの種類がある。通常、レジスタには、マニュアルなどで使われる英字1~3文字程度の略称がある。特定の目的を持つレジスタ。演算装置の出力と片方の入力につながった、ただ1個のレジスタがあり、そのレジスタに累算の結果を溜め込むことができる、といった古い設計のコンピュータで使われた語である。現在でもx86のAXレジスタのような多用されるレジスタを指して言うことがある。A, ACCと略すことが多い。演算結果を置いたり、データを一時的に記憶するレジスタである。プロセッサの内部バスにより演算装置とデータをやりとりできる。また、外部データバスとデータをやりとりできる。メモリをアクセスする場合のアドレスを指定するときに用いるレジスタである。この内容を外部アドレスバスに出す事により、メインメモリからデータを読み出す。また、プロセッサによっては、アドレスを計算するための演算回路が付属しており、実効アドレスの計算を行なうことができるようになっていることもある。アドレスレジスタの一種で、配列のベースアドレスを示すために利用できるレジスタである。配列データにアクセスするコードが簡単に記述できる。配列のインデックスを指すために利用できるレジスタである。前述のベースレジスタが示すアドレスをベースとしたオフセットを指すようにして使う。あるいは配列の要素1個のサイズ分(たとえば4バイト整数の配列でインデックスが3ならオフセットは12)スケーリングすることができる。配列データにアクセスするコードが簡単に記述できる。IXなどと略すことが多い。アドレスレジスタの一種で、コールスタックの先頭を指すポインタレジスタである。これが示すアドレスの内容を読み出すと同時にアドレスを増やす、逆に、示すアドレスに書き込むと同時にアドレスを減らす、といった動作を行えるものが多い(特にCISCでは)。また、このような、アドレスを参照してロードあるいはストアと同時にアドレスレジスタのインクリメント、デクリメントを行えるモードを「ポストインクリメント」・「プリデクリメント」、または「プリインクリメント」・「ポストデクリメント」と言う(プリとポストの組み合わせは、通常このどちらかになる)。SPと略すことが多い。アドレスレジスタの一種で、現在のサブルーチンを開始した時点のスタックポインタ(すなわち、コールスタック中の、現在のスタックフレームの位置)を指すようにして使うためのポインタレジスタである。スタックポインタ相対アドレッシングがあれば必ずしも必要ではないが、便利ではある。x86の場合、BPを利用したアドレッシングではセグメントレジスタにSSが選択される。BPと略すことが多い。アドレスレジスタの一種で、実行する命令のアドレスを指し示すレジスタ。命令の読み込みを行なう際にはその内容がアドレスバス上に出力され、また命令を読み込む度に読み取った命令の分だけ値が増加するようになっている。分岐命令は、このプログラムカウンタに値を代入することで実現される。さらに、スタックポインタと組み合わせ、プログラムカウンタの内容をスタックに一時保存した後に新たな値を代入すると、サブルーチンの呼出しを実現する事になる。また、スタックから値を取り出してプログラムカウンタに代入すると、サブルーチンから呼出し元に制御を復帰させる事になる。PCと略すことが多い。また、インストラクションポインタ(IP)、逐次制御カウンタ(Sequential Control Counter; SCC)と称される場合もある。何を書き込んでもその結果は反映されず、読み出すと必ず全ビットがゼロである、というレジスタを持つプロセッサがある。一見意味がないようであるが、命令セットを単純化したために、計算結果がある命令は全てその書き込み先を指定しなければならないが、結果が必要ない場合の書き込み先として指定するであるとか、アドレッシングにおいて必ずオフセットを指定しなければならないが、オフセットは必要ない場合、などのために使われる。特定の目的を持たず、命令により各種機能を果たすレジスタ。特に、データレジスタとアドレスレジスタを兼ね備えたレジスタ。初代68000のように、データレジスタとアドレスレジスタを分けている例もあるが、ほとんどのプロセッサは汎用レジスタを持っている。また、汎用レジスタを複数個用意しておけば、プログラミングの自由度が格段に増し、特にコンパイラが実行効率の良いオブジェクトコードを生成しやすくなる。RISC系プロセッサでは全ての汎用レジスタが同等の機能を有している事が多い。そのような設計を「レジスタの直交性が高い」と表現する事がある。なお、プロセッサの設計においては、計算対象の指定方法がほぼ全ての命令で同じである(オペランドのアドレッシングが命令に依存しない)ことを「命令の直交性が高い」などと表現する事があるが、これはレジスタの直交性とは異なる概念である。ページング方式やセグメント方式による、ページセレクタやセグメントセレクタとして使うレジスタ。演算結果によって生じた「桁あふれ」やアキュムレータが0であることの状態、あるいは各種のプロセッサの状態を保持するレジスタである。割込み禁止状態(を設定できる)など「コントロールレジスタ」と言う方が的確な内容を含んでいる場合もある。レジスタの値は、プロセッサの内部状態そのものである。つまり、レジスタの値をそっくりそのままどこかに退避させ、後にそれをそっくり元に戻せば、プロセッサの動作を一時中断し、他の作業をさせ、中断前の状態に戻すことができる。割り込み処理による高速応答性を要求されるアプリケーションを作る場合や、時分割などによる擬似的なマルチタスクを実現する時には、この動作はきわめて頻繁に行なわれる。この、プロセッサの動作状態をそっくり保存して他の動作状態に入れ替えるという動作は、コンテキストスイッチと呼ばれる。一般には、コンテキストスイッチはスタックを用いてレジスタの内容を外部のメインメモリの一定領域上に一時保存することで実現されている。しかし、コンテキストスイッチを高速化するために、主要なレジスタのコピーを保持する別のレジスタ群をプロセッサ内部に用意しておき、それを用いてコンテキストスイッチを行なう設計になっているプロセッサもある。つまり、プロセッサ内部のハードウェアにより、一瞬にしてアクセスするレジスタを切り替えられる。このようなレジスタ群を「レジスタセット」と呼ぶ。また、切り替えるレジスタ群が1セットしかない場合、それらのレジスタは「シャドーレジスタ」または「裏レジスタ」と呼ばれる。レジスタセットを用いたコンテキストスイッチは、処理速度を飛躍的に上げられる画期的な手法だが、致命的な問題点がある。レジスタを構成する回路は複雑で、プロセッサ上に多数実装するのが難しい。このため、多数のタスクを切り替える一般的なOSでは、ごく軽い内容の割込みハンドラでのみ使う、といった使われ方がされている。レジスタセットを持ったプロセッサで最も有名なものは、ザイログ社のCPU Z80であろう。ただし、セットの数は2つだけであり、一般には裏レジスタと呼ばれている。近年のプロセッサではARMがある。ソフトウェア資産の有効活用を目的として、16ビットプロセッサの命令セットをそのまま動作できる32ビットプロセッサなどがしばしば開発される。この場合、プロセッサ内部のレジスタのビット長は大きく(たいていの場合2倍に)なっているのだが、互換性を保つために古いCPUの命令コードで動作する場合には下位のビットしか用いない。インテル社の8086系列のCPUは、このように拡張してきた経緯を持つ代表的なプロセッサである。8086CPUが誕生する前のインテルの8ビットCPU、8080では汎用レジスタを“a”, “b”, “c”…と名付けていた。これを拡張した8086の汎用レジスタは“ax”, “bx”, “cx”…となった。(xはextendの略)ところが、80386で32ビット化したため、レジスタの名前は“eax”, “ebx”
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。