問題は、メモリ内の任意の 1 バイトをアドレス指定する CPU の機能にはありません。しかし、同じ粒度を持たないのはメモリです。Oli が言ったように、これは非常にアーキテクチャ固有のものですが、メモリ チップは多くの場合、データ バスの幅によって対処されます。特定のアドレスがデータバスの完全な「ワード」を表すことを意味します。
メモリ デバイスに接続された 32 ビット幅のデータ バスを備えた 32 ビット CPU の例を見てみましょう。CPU がアドレス のワードにアクセスしたい場合、0x00000000
実際にはバイト0
、 1
、2
およびにアクセスしたいと考えています3
。ただし、メモリ チップの場合、これは 1 つのアドレスで表されます0x00000000
。
ここで、CPU がアドレス のワードにアクセスしたい場合、0x00000001
実際にはバイト1
、2
、3
およびにアクセスしたいと考えています4
。ただし、メモリ チップの場合、これは address の単語0x00000000
の一部と address の単語の一部で表されます0x00000001
。
したがって、2 つのバス サイクルが必要です。
編集:いくつかの配線図を追加
これを説明するために、反対の両方のアドレス指定スキームを次に示します。

RAM チップのアドレスのビット シフトに注意してください。
アドレスは次のようになります。
// From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007
dword@0x00000001
にアクセスするには、直接アドレス指定ができないことがわかります。0x00000000
アドレスとの両方の dword を RAM チップに要求する必要があります0x00000001
。