データ用の単純なアドレッシングモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/07/04 05:50 UTC 版)
「アドレッシングモード」の記事における「データ用の単純なアドレッシングモード」の解説
レジスタ オペランドとしてレジスタのみを指定する。場合によってはアドレッシングモードと見なされない。 「ベース+オフセット」形式とその派生 「ベース+ディスプレースメント」とも。ベースレジスタの内容に、オフセット値を加えた値を実効アドレスとする。オフセットは16ビットの符号付きの値で指定することが多い(i386では32ビットである)。オフセットがゼロの場合は「レジスタ間接」アドレッシングとなり、実効アドレスはベースレジスタの内容そのものとなる。RISCでは0番のレジスタは内容が常にゼロということが多く、0番のレジスタをベースレジスタとして指定した場合、一種の「絶対」アドレッシングとなる。ただし、それで表せるアドレス範囲は狭い(オフセットが16ビットなら64KBの範囲内のみ)。16ビットのオフセット値というのは、最近のメモリ容量の大きいコンピュータを考えると小さいように思われる(i386で32ビットに拡張したのもそれが理由である)。IBM System/390 ではオフセット値は符号無しの12ビットだった。しかし、参照の局所性の原則を適用すれば、あるプログラムが短時間にアクセスするデータの大部分は狭い範囲にあることが多いと言える。このアドレッシングモードは、インデックス付き絶対アドレッシングモードと深い関係がある。 サブルーチン単位で考えた場合、重要となるデータはサブルーチンの引数と局所変数であり、それらが64KBの範囲を超えることは滅多にない。したがって、1つのベースレジスタ(フレームポインタ)で十分である。オブジェクト指向言語のメソッドの場合、(オブジェクト指向言語で this や self と呼ばれる)現在のオブジェクトのデータメンバ群を指すもう1つのベースレジスタを必要とする 構造体などの複合データ型(英語版)のアドレスをベースレジスタに設定すれば、オフセットを使ってその構造体の特定のフィールドを指定することができる(一般にレコードや構造体といった複合データは32kBよりも小さい)。 イミディエート/リテラル 演算に使用する値(定数)を直接オペランドに指定するもので、アドレッシングモードと見なさないこともある。定数は符号無しの場合と符号付きの場合がある。例えば、move.l #$FEEDABBA, D0 という命令は、"FEEDABBA" という16進の値をD0レジスタに入れる。DEC VAX では、リテラル・オペランドのサイズとして6ビット、8ビット、16ビット、32ビットがある。アンドリュー・タネンバウムは、プログラム内で使われる定数の98%が13ビットで表せることを示した。 暗黙のアドレッシングモード ある命令がアクセスするリソースが決まっているため、実効アドレスを明記せず暗黙のうちにアクセスする場合である。1970年代中ごろまでのコンピュータではよく見られた。古い典型的なコンピュータは演算対象となるレジスタが1つしかなく、それをアキュムレータと呼ぶ。アキュムレータ・マシンではほとんどの命令で暗黙のうちにアキュムレータを参照する。例えば、 という処理は
※この「データ用の単純なアドレッシングモード」の解説は、「アドレッシングモード」の解説の一部です。
「データ用の単純なアドレッシングモード」を含む「アドレッシングモード」の記事については、「アドレッシングモード」の概要を参照ください。
- データ用の単純なアドレッシングモードのページへのリンク