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

アセンブラの資料など見ていますと、アドレッシングモードがいくつか用意されているのをよく見ます。

ただ、なぜ色々なアドレッシングモードがあるかの理由がはっきりしません。

アドレッシングモードがいくつもある利点とは何でしょうか。

適切なアドレッシングモードを利用することにより、処理クロック数を短縮できるのでしょうか?

A 回答 (3件)

レジスタ操作やロードが減るので処理クロックの節約=高速化が期待できます。


いまどきのCPUだと高級言語で必要とされるアドレッシングモードを持っているのが多いと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

レジスタ操作やロードが減るという利点により処理クロックが節約できるのですね。

勉強になりました。

お礼日時:2014/10/21 11:31

アドレッシングモードというのは、高級言語ではあまり表に出てこないだけです。



たとえば、高級言語で、
i = 3;
と書けば、たいていは、「変数 i として割り当てられているメモリに、3 という数値を代入する」という意味です。

ところが、
i = j;
は、「変数 i として割り当てられているメモリに、変数 j が割り当てられているメモリにある数値を代入する」であって、「j が割り当てられているメモリの番地を代入する」という意味ではありません。

前者では、右辺の値(ここでは3)が直接取り扱われていますが、後者では、j(番地)の「中身」が取り扱われています。
また、配列へのアクセスを
i = j[3]; と書けば、取り扱う値は、「j が割り当てられているメモリから数えて、3つ後のメモリに入っている値」ですし、
i = j[x]; と書けば、「jが割り当てられているメモリから数えて、x の中身の値のぶんだけ後ろのメモリに入っている値」です。
※この場合、「後ろのメモリ」をカウントするには、取り扱っているデータ型のサイズを考慮したもの。

このように、高級言語では、見かけは同じ「代入」でも、何を代入するか(そして、本当は、「どこに代入するか」)が様々です。
もちろん、これは、必要性があって、存在している考え方ですが、アセンブラレベルで、これを区別するのが、アドレッシングモードになります。
※ここでは、データアクセスだけを取り扱ってますが。

さらに言えば、配列のアクセスなどは、それをひとつのアドレッシングモードとして扱うか、単純なアドレッシングモードを組み合わせて実現するかと、そういう設計思想の違いもあったりしますが、上記のようなデータの区別を、アセンブラレベルで扱うものが、アドレッシングモードということになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

i=3;
i=j;
i=j[3];
などで内部的に処理が色々変わるのですね。

勉強になりました。

設計思想によっても組み合わせが異なるというのも参考になりました。

お礼日時:2014/10/21 14:55

そもそも, プロセッサによって「何を『アドレッシングモード』として区別するか」が異なります.



とはいえアドレッシングモードが 1つしかないとメモリアクセスも不可能に近いからねぇ....
・種類が少ないと構造が簡単になる
・種類が多いとプログラムでの使い勝手がよくなる
というトレードオフ (と「互換性」という名前の縛り) によって決まってくる, というところじゃないかな.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

トレードオフによって、数多くのアドレッシングモードがあるものと種類が少ないアドレッシングモードのものがあるのですね。

お礼日時:2014/10/21 13:39

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