1

MIPS でのメモリ アドレッシングに問題があります。アドレッシングはワードで整列されていると書かれています...下のテキストでは、アドレスの最下位2ビットを見ている理由がわかりませんか? なぜ?誰かがここでのポイントを明確/説明する例を教えてもらえますか...では、有効なハーフワードアドレスはすべて、最下位2ビットが00または10のいずれかであると言っていますか?

では、ワード アラインされたメモリからバイトをロードしたい場合はどうすればよいでしょうか?? これどうやってするの?左に 2 シフトする必要がある、つまり、最下位 2 ビットを 0 にする必要があると言われています。

代替テキスト http://img69.imageshack.us/img69/1603/jpgdw.jpg

4

4 に答える 4

1

「ワード アライン」とは、CPU が常に 4 バイトを読み取ることを意味します。

ただし、操作が実際に 2 バイト short で行われる場合、0b00 または 0b10 で終わるアドレスを持つことは正当であり (したがって、アドレスは偶数です)、CPU はレジスタにロードするときに正しい 2 バイトをレジスタに挿入します。正しい情報を書きます。

同様に、文字を読み取る場合、最下位 2 ビットは任意の値を取ることができ、正しいバイトが関連するレジスタにロードされるか、レジスタの関連する部分 (通常は LSB) がメモリの正しい部分に書き込まれます。

ただし、アドレスが 0b00 で終わらない (4 バイト)intを読み取ろうとすると、SEGV またはその付近が表示されます。

于 2010-03-05T04:57:17.450 に答える
0

1バイトを読み取りたい場合は、メモリ内のすべての場所から読み取ることができます。心配することはありません。ワードアラインメントは、一度に複数のバイトを読み取りたい場合にのみその役割を果たします。

ワード境界を越える4バイト値を読み取りたい場合は、4つのシングルバイト読み取り操作、シフト、およびORを使用して読み取ることができます。単純な読み取りよりもはるかに低速です。

于 2010-03-07T13:37:17.493 に答える
0

ハーフワードでアラインされたアドレスは、バイナリ 0 で終わります (ハーフワードのバイト数である 10 進数の 2 で割り切れます)。ワード境界で整列されたアドレスは、2 進数の 00 (10 進数の 4 で割り切れる、1 ワードのバイト数) で終わります。

はい、文言とチャートは少しわかりにくいです。

于 2010-03-05T04:54:09.207 に答える