忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

アドレス指定方式

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

アドレス指定方式

アドレス指定方式?

気にしたことがないのだが、基本情報に出てくる難問の1つとして知られているらしいのがアドレス指定方式に関する問題。確かに読んでみると難問に見える。

どんな種類がある

  1. 直接アドレス指定 (絶対アドレス指定)
  2. 間接アドレス指定
  3. 基底アドレス指定 (ベースアドレス指定)
  4. 相対アドレス指定
  5. 指標アドレス指定 (インデックスアドレス指定)
  6. 即値アドレス指定

アドレス指定ってなんだよ

住所の指定方法、と考えればよいだろう。

よくアドレス指定方式の話でオペランド部という言葉が出てくる。このオペランド部に住所を入力する……が。住所の指定方法にも色々あり、その指定方法をなんちゃら指定と呼んでいる。

直接アドレス指定 (絶対アドレス指定)

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:東京都新宿区新宿6丁目27番30号 に住んでいる人

超単純である。場所を直接指定である。東京都新宿区新宿6丁目27番30号に荷物を届けてね、みたいなやつである。ちなみに、スクウェア・エニックスの本社所在地である。

ただ、プログラミングではあまり使いたくない。柔軟に色々やることができないので不便なのだ。「先頭のやつを」とかそんな感じの指定をするときにはこいつの考え方。

間接アドレス指定

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:大阪府大阪市淀川区西中島4-13-1 に住んでいる人が教えてくれた住所に住んでいる人

もう少し柔軟に使えるのがこれである。東京都新宿区新宿6丁目27番30号にいくと「ここにお願いね」と別の住所を指定される。

こいつは直接アドレス指定より使いやすい。何故だろうか。プログラムを書き換えるにはいろいろと面倒なのだ。それくらいだったら記憶装置の方を書き換えた方が楽だ。

例えば、["東京都新宿区新宿6丁目27番30号", "東京都港区芝5-37-8", "大阪府大阪市北区本庄西2-12-16"] の三か所に何かを届けたいとする。

そうすると、直接アドレス指定方式だと次のように書く。

  • 東京都新宿区新宿6丁目27番30号 に届けて
  • 東京都港区芝5-37-8 に届けて
  • 大阪府大阪市北区本庄西2-12-16 に届けて

問題は「違うところに届けたいとき面倒だよね。プログラムを書き換えるのは大変だから」ということだ。そこで、次のように書く。

  • 1枚目の紙に書かれた住所 に届けて
  • 2枚目の紙に書かれた住所 に届けて
  • 3枚目の紙に書かれた住所 に届けて

プログラムと違い、紙は書き換えるのが簡単だ。住所変更は先ほどより格段に楽になった。

基底アドレス指定 (ベースアドレス指定)

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:この紙に書かれた場所の三件となり に住んでいる人

このあたりから難しくなる。

スタート地点 (= 基底 / ベース) となる場所を決め、そこからの距離でアドレスを指定する。

つまり、「ココから三件隣に届けて」とかになる。ココは 東京都新宿区新宿6丁目27番30号 かもしれないし 東京都港区芝5-37-8 かもしれない。実行する場所によって何が起こるのかが変わるので、何かを書き換えなくても動きが変わるのが便利だ。

スタート地点はベースレジスタ、という所に書かれる。

相対アドレス指定

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:この紙に書かれた場所の三件となり に住んでいる人

基底アドレス指定と基本的には変わらない。今いる場所を基準にしてどこに、という指定方法である。

ただし、この場合はベースレジスタではなく、プログラムカウンタと呼ばれる現在位置を示す所に書かれた場所がスタート地点となる。ベースレジスタが無い場合に使われたりする。利点は基底アドレス指定と同じ。

指標アドレス指定 (インデックスアドレス指定)

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:ここの三件となり に住んでいる人

こちらも基本的には変わらず、スタート地点からの距離で記述する。ただ、スタート地点がオペランド側に書かれ、移動距離がインデックスレジスタ、という所に書かれる。その為、「3件飛ばしに訪問して」とかそういう指示をやるのに適している。

即値アドレス指定

命令部:オペランド部に書いてある人に荷物を渡して
オペランド部:この人

アドレスを特に指定しない。「住所は指定しない、受取人が直接来た」みたいな感じである。もちろん、柔軟にプログラミングはできないし、大きなデータも扱えない。でも、届ける時間が要らないのでとにもかくも速いプログラムができる。

短く説明

  • 直接指定は住所直接指定。間接指定は住所の書かれた紙を渡す。
  • 基底指定と相対指定は似たような感じ
  • 指標指定も基底指定と似ているが繰り返しに強い
  • 即値指定はアドレスじゃなくてデータそのものが来る
PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R