アプリ版:「スタンプのみでお礼する」機能のリリースについて

アドレス指定方式(アドレシング)についての質問です。
タイトルの通り、インデックスアドレス指定方式とベースアドレス指定方式の違いを教えていただきたいです。

参考書などでは、

●インデックスアドレス指定方式
・命令の番地部とインデックスレジスタの値を加算した値を有効アドレスとする
・インデックスレジスタの内容を変えるだけで別なアドレスの内容が参照できる
●ベースアドレス指定方式
・命令の番地部が指定するアドレスに、ベースレジスタの内容を加算した値を有効アドレスとする
・ベースレジスタの値を変えるだけでプログラムが主記憶装置のどこからでも実行できる(再配置可能)

となっています。
有効アドレス=番地部のアドレス+レジスタの値
となるのが同じで、基準となる値がインデックスアドレス指定方式のほうでは命令の番地部であり、ベースアドレス指定方式のほうはベースレジスタの値、ということまではわかったのですが、この「基準」が違うことでどういう違いがあるのか、具体的にどういう場合にどちらの方式が使われるのかがわかりません。
ベースアドレス指定方式の「再配置可能」という部分もどういう仕組みなのか、よくわからないです。

ご回答、よろしくお願いいたします。

A 回答 (2件)

再配置可能には2つの意味があります。


1.(加工すれば)メモリーのどこにでも入れられるプログラム
2.メモリーにローディングしたあと、場所を動かしても動くプログラム

まず前提がいくつかあります。
1.プログラムはローディングされる時にどこに入るか分かりません。
2.ローディングされた時、先頭アドレスがベースレジスターに入れられます。
3.原則として絶対アドレスを捕まえないとメモリーにはアクセスできません。
4.ベースレジスター方式ではどこにローディングされても絶対アドレスが捕まえられます。
5.インデックスレジスター方式ではデータや飛び先の絶対アドレスの取得は困難です。
  そこでリンケージエディターやローダーで命令のアドレス部の書き換えをやるのです。
  インデックスは配列を処理すると考えればいいと思います。

再配置ですがインデックスレジスター方式では1番は通常やっていますが、
2は相当難しいです。
ベースレジスター方式では1も2も簡単にやってのけられます。
単にベースレジスターの書き換えだけで済みますから。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。
知識不足で、まだあまりイメージがわかないですが、参考になりました。

お礼日時:2006/04/20 21:33

この2つは対立する概念ではなくて、独立したものです。

つまり、組み合わせで4通りありえます。
・ダイレクトアドレッシング(命令語だけでアドレス指定)
・インデックスアドレッシング(命令語のアドレスに添え字の値を表すレジスタ値を加えて参照)
・ベースアドレス方式(命令語でベースレジスタからの変位を指定してアドレスを指定)
・ベースアドレス方式のインデックスアドレッシング(ベースレジスタに命令語の指定値を加え、さらに添え字レジスタ値を加える)

実行時にリロケータブルにするために、ベースアドレス方式を使い、配列要素を参照するためにインデックスアドレス方式を使います。
    • good
    • 1
この回答へのお礼

ご回答、ありがとうございます。
ベースアドレス方式:リロケータブル
インデックスアドレス方式:配列要素を参照
ということですね。

お礼日時:2006/04/20 21:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!