この質問がテストペーパーで発生しました。それは述べました 与えられたアドレッシングモードのどれが速いですか?どうして?レジスタアドレッシングモードとダイレクトアドレッシングモード
- 登録アドレッシングモード
- ダイレクトアドレッシングモード
今私に従ってレジスタは、コンピュータで最速のメモリ位置があるように高速である必要がありアドレッシングモードを登録します。これは正解ですか?
助けてください。ありがとう
この質問がテストペーパーで発生しました。それは述べました 与えられたアドレッシングモードのどれが速いですか?どうして?レジスタアドレッシングモードとダイレクトアドレッシングモード
今私に従ってレジスタは、コンピュータで最速のメモリ位置があるように高速である必要がありアドレッシングモードを登録します。これは正解ですか?
助けてください。ありがとう
登録アクセスが最も高速です。ただし、アクセスしているメモリデータがすでにCPUのデータキャッシュにある場合、メモリアクセスは高速になります。
2つのアドレッシングモードの違いは...アドレスのソースです...直接アドレッシングモードでは、アクセスされるアイテムのアドレスが命令に即座にエンコードされるため、命令はより大きくなりますいくつかの場合は非常に大きいので、アクセスにはより多くのクロックサイクルが必要です。理想的には、オペコードの直後のバイトであり、オペコードをフェッチすると通常、少なくともその後ろのキャッシュラインがフェッチされます。最も古いx86プラットフォームは、残りの命令や次の数多くの命令がすでにフェッチされてパイプに残っていない場合、どのように命令を実行しているのかわかりません。古いx86プロセッサでも、ある程度のサイズのプリフェッチキューがありました。
レジスタアドレッシングとは、アクセス中のアイテムのアドレスがレジスタ内にあることを意味します。アドレスがすでに存在していたと仮定すると、より大きな命令、余分なサイクル、命令用に焼かれたキャッシュラインの多くが発生しないため、これはより高速です。この引数に注意する必要があるのは、たとえば直前の命令が直接アドレスをレジスタにロードすることです。
mov ax,[1000h]
mov ax,[bx]
命令サイズと追加のキャッシュの焼成とサイクルがかかるためもう一つは、(このレベルで比較することができるもののために)最初のよりも高速です。全体的には、(比較可能なもののために)フェッチと実行に少ないサイクルがかかるため
しかし
mov ax,[1000h]
mov bx,1000h
mov ax,[bx]
直接アドレッシングが高速です。
比較できることはどういう意味ですか?アドレッシングモードは、アドレスがどこから来るのかと関係があります。その命令をEXECUTEしてメモリサイクルを実行すると、2つの命令が同じである2つの命令を比較するために、2つの命令が等しい、バス上のアドレスです。そのテストプログラムではデータが常にデータキャッシュにあり、そのテストプログラムではレジスタアドレッシングバージョンがそうでないか、時にはそうではないため、直接アドレッシングが高速である場合があります。したがって、2つの命令の間で比較できるものは、命令のサイズであり、これがサイクルにつながり、それが燃えるキャッシュラインにつながります。 1つのキャッシュラインは多くのレジスタベースの命令を保持することができますが、いくつかの直接/即時ベースの命令しか保持できないため、直接/即時を使用すると、プログラム実行時に機会費用が発生し、はい、これらのサイクルの多くは、リモートで近代的なものと並行して行われます。
これらのタイプの質問は、命令セットを理解しているかどうか、またどれだけ詳細を返すかによって、実際のコストとは違うかどうかを理解するかどうかに関係します。同様に経験がなくても、単に実験を試みると、キャッシュの周りで実験を工夫しなければならないため、失敗したり、違いが見られなくなります。
私は非常にマイケル・アブラッシュ
しない1が不完全であることを大きな黒いグラフィックスプログラミングブックが付属して無料1により本アセンブリ言語の禅をお勧めします。あなたは良い形の中古コピーを手に入れることができます(2番目のものを買って、店で買って本棚に住んでいた私のオリジナルよりも良かったです)。 8088と8086についての詳細は、本が印刷に行く時代遅れであった、それは本の重要性ではない、重要性はどのように問題を攻撃するかを理解することであり、どのように問題について考えるかについての基本的な洞察を得る舞台裏で進んでいる。今日はかなり複雑ですが、それでも理解できますが、今日のようなものに飛び込む前に、このような基礎から始めておくことをお勧めします。 Espとx86(あなたがバスやキャッシングを見始めると、x86以外の何か、何かを学ぶことを強くお勧めします)。 http://github.com/dwelch67/amber_samples。私はきれいにして、アンバープロセッサー(arm2クローン)をオープンソースツールを使って利用できるようにして、プロセッサー内で動作するものを見ることができます。 1つのバージョンのアンバーにキャッシュがあります。やはり、mmusやマルチコアを追加する足踏みなどは複雑さを増すだけです。
スーパー・ショート・アンサーでは、ダイレクト・アドレッシングは長い命令を使用してエンコードし、2つの命令だけが比較されるときはレジスタ・アドレッシングより多くのサイクルを行います。メモリの副作用、キャッシングなどは、違いを混乱させたり中和したりする可能性があります。
OTOHはレジスタの名前を変更すると実行される可能性があるため、さらに高速に処理することができます – hirschhornsalz
また、私が与えている直接的な値がメインメモリに保存されることを明らかにすれば、 –
最初の検索ヒット:[1](http://www.cs.nmsu.edu/~pfeiffer/classes/273/notes/immdirext.html)、[2](http://en.wikipedia.org/wiki /Addressing_mode#Absolute.2FDirect)。 –