アドレス指定方式についてです


アドレス指定方式についてです。

直接アドレス指定方式  
指標アドレス指定方式  
ベースアドレス指定方式  
相対アドレス指定方式  
間接アドレス指定方式  
レジスタアドレス指定方式  
即値アドレス指定方式

この7つの違いはわかりました。  
しかし、それが具体的に何に使われているのか？  
この思想の違いが何故生まれてきたかなどの歴史的な経緯がわかりません。  
多分OSの設計思想の話だと思うのですが...




かつてはメモリーの決まった位置にプログラムを置いて、データや命令がある場所を示すアドレスは固定で動いていたようですね。そうすると、アドレス指定はすべて「直接指定（絶対指定）」で問題ありませんでした。プログラムを組む人は、プログラムがロードされるアドレスを知っていて、「どこに飛ぶ」といった指示を直接指定するわけですね。

しかし、メモリにいろんなプログラムがロードされたり、足りないメモリを補うためにメモリじゃないところにプログラムを置いたり、果てはプログラムが不正アクセスされないようにロード場所を意図して毎回変えたり、といった実行方法が普通になってきました。そうすると、実際のアドレスはプログラムが動くその時までわかりません。

そうなると、

  * 今の場所から＊＊だけ先のアドレス
  * スタート地点から＊＊だけずれたアドレス
  * アドレスは変数に入れといたから

みたいなアドレスの指定方法が必要になってきました……というような経緯で、いろんなアドレッシング方式が生まれてきたのだったと思います。

Wikipediaですが[位置独立コード](https://ja.wikipedia.org/wiki/%E4%BD%8D%E7%BD%AE%E7%8B%AC%E7%AB%8B%E3%82%B3%E3%83%BC%E3%83%89)や[リロケータブルバイナリ](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%AD%E3%82%B1%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AB%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA)などの説明を読んでみられてもいいかもしれません。

