誰かがWord
とByte
のアドレス指定の違いを説明できますか?メモリサイズなどとどう関係していますか?
この画像は理解しやすくするはずです: http://i.stack.imgur.com/rpB7N.png
簡単に言えば、
•バイトアドレッシング方式では、最初のワードはアドレス0から始まり、2番目のワードはアドレス4から始まります。
•Wordアドレッシング方式では、最初のWordのすべてのバイトはアドレス0にあり、2番目のWordのすべてのバイトはアドレス1にあります。
一度に1バイトずつデータを処理するアプリケーションを検討すると、バイトアドレス指定の利点は明らかです。バイトアドレス指定可能なシステムでの単一バイトのアクセスは、単一アドレスの発行のみを必要とします。 16ビットのワードアドレス指定可能システムでは、最初にバイトを含むワードのアドレスを計算し、そのワードをフェッチしてから、2バイトのワードからバイトを抽出する必要があります。バイト抽出のプロセスはよく理解されていますが、バイトに直接アクセスするよりも効率的ではありません。このため、最近の多くのマシンはバイトアドレス指定が可能です。
アドレス指定可能性は、独自のアドレスを持つメモリのユニットのサイズです。また、近隣に影響を与えることなく変更できる最小のメモリチャンクでもあります。
たとえば、バイトが通常の8ビットで、ワードサイズ= 4バイトのマシンです。 Wordでアドレス可能なマシンの場合、int
の2番目のバイトのアドレスなどはありません。文字列(char str[]
のような配列)を処理すると、文字をまとめて格納するため、不便になります。 str[1]
だけを変更することは、それを含むWordをロードし、変更を適用するためにいくつかのシフトおよび/または操作を実行してから、Wordストアを実行することを意味します。
これは、整列されていないWordロード/ストアを許可しないマシンとは異なることに注意してください(Wordアドレスの下位2ビットは0でなければなりません)。このようなマシンには通常、バイトのロード/ストア命令があります。それもない機械について話しています。
CPUアドレスには実際にはまだ下位ビットが含まれている可能性がありますが、常にゼロである(または無視する)必要があります。ただし、それらがゼロであることを確認した後、それらは破棄される可能性があるため、残りのメモリシステムは、2つの隣接するワードのアドレスが1(4ではない)であるワードアドレスのみを認識します。ただし、レジスタが64kの異なるアドレスしか保持できない16ビットCPUでは、これを行うことはほとんどありません。個別の各CPUアドレスは、下位ビットを破棄する代わりに、異なる2バイトのメモリを参照します。 2Bのワードアドレス指定可能なメモリでは、バイトアドレス指定可能なメモリを使用した64kiBの代わりに、128kiBのメモリをアドレス指定できます。
面白い事実:ARMは、アドレスの下位2ビットを整列されていないWordロードのシャッフルコントロールとして使用するために使用されていました(ただし、常にバイトロード/ストア命令がありました)。
以下も参照してください。
ビットアドレス指定可能なメモリは存在する可能性がありますが、存在しないことに注意してください。 8ビットバイトは現在、ほぼ普遍的に標準です。 (古代のコンピューターでは、バイトが大きくなることがありました。 ウィキペディアのバイト記事 の履歴セクションを参照してください。)