現在,基本情報技術者試験を受験しようと勉強しています.
その中で気になったことがあるので質問させて頂きます.
アドレス指定方式の中で,「インデックスアドレス指定方式」と「ベースアドレス指定方式」というものが登場します.
どちらも「番地部にレジスタの値を加えて実効アドレスにする」「レジスタの内容を変えることで違う場所にアクセスする」ような特徴があり,違いがよくわかりませんでした.
自分で調べて見たのですが,
- インデックスアドレスは配列の様に連続的にアクセスするためにインデックスレジスタの値を変更する
- ベースアドレスはアクセス対象そのものを移動できるようにするために,移動に連動してベースレジスタの値を変更する(「再配置可能」というワードからの推測)
というような認識になったのですが,正しいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
pikovoltさんの回答のコメント欄での議論を踏まえ、
どちらも「番地部にレジスタの値を加えて実効アドレスにする」「レジスタの内容を変えることで違う場所にアクセスする」ような特徴があり,違いがよくわかりませんでした.
という質問に即して、回答すると、
ベースアドレス指定方式で使うレジスタをベースレジスタ、インデックスアドレス指定方式で使うレジスタをインデックスレジスタと書くことにすると、
・ベースレジスタ・・・・サブルーチン呼び出しなどをしない限り原則として値は不変。その値と目的アドレスの差分を命令で指定する。サブルーチン呼び出しをすると設定し直される(ことが多い)
・インデックスレジスタ・・・・配列の添え字計算をした結果を格納する(注参照)。命令では配列の先頭アドレスを指定する
とかでしょうか。
同じ、「目的アドレス=レジスタの値+命令で指定した値」であってもこのように違います。
インデックスアドレス指定方式であってもベースアドレス指定方式と併用するCPUアーキテクチャが多いかと思います。つまり、配列要素へのアクセスは「目的アドレス=ベースレジスタの値+命令で指定した値(目的の配列の先頭とベースレジスタ値との差分)+インデックスレジスタの値」。
注:インデックスレジスタに入るのは添え字そのものじゃなくて、配列の添え字を計算した後、要素サイズを掛けて、配列先頭の添え字が0でない場合はその調整をした物が、インデックスレジスタに入って、命令で指定した値と足されます。概念の説明なので、コンパイラの最適化によって違う動きになるでしょう。例えば添え字が定数ならインデックスレジスタを使わずに、コンパイル時にアドレスを計算するでしょう。
投稿2015/07/14 16:38
総合スコア85785
0
ベストアンサー
教科書にどんなふうに書かれているかよく知らないのですが、質問にある2つのレジスタには以下のような用途の違いがあります。
・プログラム実行位置を設定(ベースアドレス)
・配列等のデータ位置を設定(インデックスアドレス)
これらの機能は、x86系のCPUが有名ですね。
実際には実行される命令にもアドレス指定が含まれているので、レジスタと命令で指定されるアドレスを合わせて最終的な参照先が決定されます。
このページとか見るとイメージできますでしょうか。
ttp://www.kogures.com/hitoshi/webtext/hs-cpu-address/index.html
投稿2015/07/13 08:07
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/07/13 08:26
2015/07/13 10:34 編集
退会済みユーザー
2015/07/13 15:16 編集
2015/07/13 16:56 編集
退会済みユーザー
2015/07/14 10:42
2015/07/14 12:10
2015/07/14 12:21
退会済みユーザー
2015/07/14 12:51
2015/07/14 16:13
2015/07/14 16:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。