アプリ版:「スタンプのみでお礼する」機能のリリースについて

var: .word 0xe1a3
movw var, %ax

のアセンブラをリトルインディン系のシステムで動かした場合、
メモリのアドレスの下位に0xa3が入り、上位に0xe1が入り、
アドレスの下位(0xa3)がレジスタの下位レジスタ(%al)に入り、
アドレスの上位(0xe1)がレジスタの上位レジスタ(%ah)に入る。

ビッグインディアン系のシステムで動かした場合、
メモリのアドレスの下位に0xe1が入り、上位に0xa3が入り、
アドレスの下位(0xe1)がレジスタの上位レジスタ(%ah)に入り、
アドレスの上位(0xa3)がレジスタの下位レジスタ(%al)に入る。

という理解で正しいですか?

質問者からの補足コメント

  • どう思う?

    x86系(リトルエンディン)のCPUでは、
    この例では、axには0xe1a3と入り、

    string: .ascii "abcd"
    movl string, %eax

    ではeaxに0x64636261と入る様なのですが、
    ビッグエンディアン系では、レジスタにどの様に入るのかを知りたいのです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/03/04 16:19
  • どう思う?

    最終的なAX及びEAXレジスタの値をもう一度確認させてください。

    ケース1の場合
    リトルエンディンでは、ax=0xe1a3
    ビッグエンディアンでは、ax=0xe1a3

    ケース2の場合
    リトルエンディンでは、eax=0x64636261
    ビッグエンディアンでは、eax=0x61626364

    という理解で良いですか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/03/04 20:41

A 回答 (2件)

x86のコードでは EAXにメモリから32bit整数を読み込んでいる


だけです。
ビッグエンディアンで同様のことをやれば
0x61626364
になります。
この回答への補足あり
    • good
    • 0

ビッグエンディアンとリトルエンディンは「メモリ上」に整数値を


どのように配置するかを表わす言葉で、CPU内部のレジスタは
関係ありません。

低いアドレスの端に LSB, 高いアドレスの端に MSB が入るように
するのがリトルエンディアン、逆がビッグエンディアンです。

質問のケース(16bit整数)の場合、
データのメモリ上の先頭アドレスを A とすると

リトルエンディアン
A + 0番地 0xa3
A + 1番地 0xe1

ビッグエンディアン
A + 0番地 0xe1
A + 1番地 0xa3
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!