No.3
- 回答日時:
アドレッシングモードというのは、高級言語ではあまり表に出てこないだけです。
たとえば、高級言語で、
i = 3;
と書けば、たいていは、「変数 i として割り当てられているメモリに、3 という数値を代入する」という意味です。
ところが、
i = j;
は、「変数 i として割り当てられているメモリに、変数 j が割り当てられているメモリにある数値を代入する」であって、「j が割り当てられているメモリの番地を代入する」という意味ではありません。
前者では、右辺の値(ここでは3)が直接取り扱われていますが、後者では、j(番地)の「中身」が取り扱われています。
また、配列へのアクセスを
i = j[3]; と書けば、取り扱う値は、「j が割り当てられているメモリから数えて、3つ後のメモリに入っている値」ですし、
i = j[x]; と書けば、「jが割り当てられているメモリから数えて、x の中身の値のぶんだけ後ろのメモリに入っている値」です。
※この場合、「後ろのメモリ」をカウントするには、取り扱っているデータ型のサイズを考慮したもの。
このように、高級言語では、見かけは同じ「代入」でも、何を代入するか(そして、本当は、「どこに代入するか」)が様々です。
もちろん、これは、必要性があって、存在している考え方ですが、アセンブラレベルで、これを区別するのが、アドレッシングモードになります。
※ここでは、データアクセスだけを取り扱ってますが。
さらに言えば、配列のアクセスなどは、それをひとつのアドレッシングモードとして扱うか、単純なアドレッシングモードを組み合わせて実現するかと、そういう設計思想の違いもあったりしますが、上記のようなデータの区別を、アセンブラレベルで扱うものが、アドレッシングモードということになります。
回答ありがとうございます。
i=3;
i=j;
i=j[3];
などで内部的に処理が色々変わるのですね。
勉強になりました。
設計思想によっても組み合わせが異なるというのも参考になりました。
No.2
- 回答日時:
そもそも, プロセッサによって「何を『アドレッシングモード』として区別するか」が異なります.
とはいえアドレッシングモードが 1つしかないとメモリアクセスも不可能に近いからねぇ....
・種類が少ないと構造が簡単になる
・種類が多いとプログラムでの使い勝手がよくなる
というトレードオフ (と「互換性」という名前の縛り) によって決まってくる, というところじゃないかな.
回答ありがとうございます。
トレードオフによって、数多くのアドレッシングモードがあるものと種類が少ないアドレッシングモードのものがあるのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# アセンブラ指令 3 2023/06/17 14:47
- 財務・会計・経理 損益計算書の「持分法による投資利益」は連結貸借対照表の「関係会社出資金」に計上される? 1 2022/03/29 10:33
- 電車・路線・地下鉄 西武鉄道40000系は長距離列車には不向きですね? 2 2023/06/10 00:22
- その他(自転車) おすすめの自転車(ミニベロ)を可能なら理由も一緒に教えてください 5 2023/03/02 14:09
- 不動産投資・投資信託 ETFと日経225,56歳からのささやかな投資信託 3 2023/05/18 05:08
- Windows 10 Fドライブは「赤丸の中にレ点マーク」が付いているのは何故ですか 1 2023/05/30 21:31
- 法学 *注意:正しい選択肢を選ぶ問題です。 表現の自由と名誉毀損罪に関する次の説明のうち,最も適当なものを 1 2022/11/27 08:54
- LINE 恥ずかしいが勘違いやった 0 2023/05/23 00:32
- その他(プログラミング・Web制作) x86_32のGASの擬似命令 3 2023/06/07 19:55
- その他(悩み相談・人生相談) 著作権法違反になりますか? 6 2023/03/28 19:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
エラーの意味は? Lvalue req...
-
[VBS]変数を定数に変換する方法...
-
processing エラーで、 "cannot...
-
C言語 列挙型(enum型)変数について
-
変数にオフセットが付いている...
-
DataTableの値を変数に代入したい
-
【JAVA】 計算の順番について...
-
整数xxxが大き過ぎますというエ...
-
代入ができない。(undefined)
-
コマンドプロンプト バッチ|結...
-
Variant型で宣言してるのにEmpt...
-
JAVA初学者の悩み: if else 式...
-
C言語 アロー演算子について質...
-
プログラミングで変数と関数の...
-
i++と++i ってどう違うのですか?
-
verilog HDLの[=]と[<=]の使い分け
-
javaのObject型配列について
-
Java認定試験3級の問題です。 ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
C言語 列挙型(enum型)変数について
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
[VBS]変数を定数に変換する方法...
-
python の 連鎖代入の文法
-
エラーの意味は? Lvalue req...
-
jsp~jspにhiddenを使って変数...
-
processing エラーで、 "cannot...
-
整数xxxが大き過ぎますというエ...
-
プログラミングで変数と関数の...
-
構造体からレコードセットへの代入
-
コマンドプロンプト バッチ|結...
-
stdpicture型の変数に、、
-
無名関数のメリットがよくわか...
-
i++と++i ってどう違うのですか?
-
DataTableの値を変数に代入したい
-
Accessコンボボックスにレコー...
-
VBA 1行で複数の代入を行った...
おすすめ情報