2

リトルエンディアン:

mov eax,4
push dword  0x44434241
mov ebx,1
mov ecx,esp
mov edx,4
int 0x80
add esp,4

DCBAではなくABCDを印刷する理由がわかりません。41が最低のアドレスにあり、44が最高のアドレスにあるのに、なぜですか?たとえば、私が書くとき

x: dd 0x12345678

78は最下位アドレスにありますが、それでもここの番号は78563412ではなく12345678です。

4

2 に答える 2

2

0x12345678は 32 ビットの値で、リトル エンディアン システムで表され0x78、最小のアドレス (これを address と呼びましょうaddr) と0x12最大のアドレスで表されます。

 addr   addr+1  addr+2  addr+3                single 32-bit number
+----+  +----+  +----+  +----+                  +--------------+
| 78 |  | 56 |  | 34 |  | 12 |    represents    |   12345678   |
+----+  +----+  +----+  +----+                  +--------------+

32 ビット値は、最下位アドレスと最上位アドレスに0x44434241格納されます。0x410x44

 addr   addr+1  addr+2  addr+3                single 32-bit number
+----+  +----+  +----+  +----+                  +--------------+
| 41 |  | 42 |  | 43 |  | 44 |    represents    |   44434241   |
+----+  +----+  +----+  +----+                  +--------------+

しかし、最初の例のコードは、メモリを 32 ビットの数値として使用していませんwrite。システム コールを使用して、一連のバイトをに書き込みますstdout。このバイト シーケンスは、メモリに格納されている順序で書き込まれます。

 addr
+----+
| 41 |    =>   single byte 'A' is printed, then...
+----+

addr+1
+----+
| 42 |    =>   ...single byte 'B' is printed, then...
+----+

addr+2
+----+
| 43 |    =>   ...single byte 'C' is printed, then...
+----+

addr+3
+----+
| 44 |    =>   ...single byte 'D' is printed
+----+
于 2012-07-23T19:58:10.543 に答える
1

私はこれが起こっていると信じています->「最も一般的なケースは、単一の16、32、または64ビットワード内でバイトがどのように順序付けられているかを指し、エンディアンはバイトオーダーと同じです。通常の対比はより大きなデータ項目内で、最上位または最下位のバイトが最初に順序付けられるか、つまり、最下位のバイト アドレスに順序付けられるか。」

ウィキペディアより

于 2012-07-23T06:15:54.210 に答える