2

エンディアンは、ワード内のバイトの順序を決定します。
次のメモリシステムを考えてみましょう。

ここに画像の説明を入力してください

したがって、これはバイトアドレス可能な32ビットメモリです。16進値'val = 0x56789A'をワードアドレス0のメモリ位置に移動すると、ビッグエンディアンの場合は次のようになります。リトルエンディアンの場合は次のようになります
ここに画像の説明を入力してください

ここに画像の説明を入力してください

ただし、レジスタには値が '56789A' itlefとして格納されていることがわかっているため、ビッグエンディアンタイプのバイト順序を使用している場合は、値を正しい順序でロードできるため、問題ありません。
しかし、順序を逆にする必要があるリトルエンディアンの場合はどうでしょうか。リトルエンディアンでは、「9A7856」としてロードされますが、これは誤りです。
次に、このようにメモリに保存しますか?(つまり)リトルエンディアンタイプの順序付けのために別の組織を持っていますか?例: ここに画像の説明を入力してください
これで、ワードアドレス位置「0」の値をレジスタにロードして、さらに操作することができます。これは可能な解決策でした。
しかし、今では、エンディアンはプロセッサではなくメモリセルの配置に依存することを意味します......これはどのように正確に機能しますか?
それとも、エンディアンはメモリアーキテクチャの影響をまったく受けず、プロセッサだけの影響を受けるのでしょうか。では、最後に、エンディアンはプロセッサまたはメモリに依存しますか?

4

1 に答える 1

3

エンディアンは実際にはインターフェースの問題です。32ビットレジスタロードの場合、1つのインターフェイスが32ビット値を要求し、メモリインターフェイスがバイトの配列を提供します。何かがそのインターフェースを解決する必要があります。戻り値の最上位ビットに入る下位バイトとしてバイト配列を解決する場合、それはビッグエンディアンです。下位バイトが戻り値の最下位ビットに入ることで解決される場合、それはリトルエンディアンです。

だから、本当にあなたの質問は、誰がそれらのインターフェースを解決するかです。技術的には、プロセッサがメモリからのデータをどのように要求するかが重要です。「32ビット値が欲しい」と言って要求した場合、バイト配列を持つメモリがそれを解決する必要があります。「4バイトが欲しい」と言って要求した場合、プロセッサはそれをレジスタに格納する前に解決する必要があります。

慣例により、プロセッサはこのインターフェイスを解決します。これにより、メモリはビッグエンディアンプロセッサとリトルエンディアンプロセッサの両方で動作できるようになります。これは、両方のタイプのプロセッサに同じインターフェイス(バイト配列)を提示し、プロセッサに必要な方法で解決させることができるためです。単純化するリスクがあります。プロセッサは、ロード/ストアユニットとメモリインターフェイスユニットでそれを解決します。レジスタに到達するまでに32ビット値であり、メモリから要求されたバイト配列からメモリインターフェイスユニットによってすでに解決されているため、レジスタはそれについて考える必要はありません。

于 2013-02-23T17:21:56.007 に答える