it-swarm.com.de

Also auf x86-64 ist es Big Endian?

0x0000000000400507 <main+28>:    74 0c  je     0x400515 <main+42>
0x0000000000400509 <main+30>:    bf 28 06 40 00 mov    $0x400628,%edi

..

0x400507 <main+28>: 0x28bf0c74

Ist meine Schlussfolgerung richtig?

32
kern

Nein, Intel-CPUs sind Little Endian: http://en.wikipedia.org/wiki/Endianness

65
linuts

Zunächst müssen Sie wissen, dass die kleinste Dateneinheit, die von fast allen modernen CPUs manipuliert werden kann, ein Byte mit 8 Bit ist. Bei Zahlen schreiben und lesen wir (Menschen) von links nach rechts und schreiben die höchstwertige Ziffer zuerst, sodass die höchstwertige Ziffer links steht.

little-Endian impliziert zwei Dinge für die CPU:

  1. Angenommen, die CPU holt 4 Bytes aus dem Speicher, z. B. beginnend mit der Adresse 0x00 und diese Adresse 0x00 enthält das Byte 11111111 welches ist 0xFF, Adresse 0x01 enthält das Byte 00111100 welches ist 0x3C , Adresse 0x02 enthält das Byte 00011000welches ist 0x18 und Adresse 0x03 enthält das Byte 00000000 welches ist 0x00, wenn die CPU diese 4 Bytes als Ganzzahl interpretiert, interpretiert sie sie als Ganzzahlwert 0x00183CFF. Das heißt, die CPU betrachtet das Byte an der höchsten Adresse als das höchstwertige Byte (Most Significant Byte, MSB). Dies bedeutet, dass für die CPU das Byte an dieser Adresse umso wichtiger ist, je höher die Adresse ist.

     (0xFF)   (0x3C)   (0x18)   (0x00)    <-----value of each byte in hex
    11111111 00111100 00011000 00000000   <-----byte at each addresse
    ^        ^        ^        ^
    0x00     0x01     0x02     0x03       <-----addresses
    
  2. Gleiches gilt, wenn die CPU den Integer-Wert 0x00183CFF in den Speicher schreibt. Es wird 0xFF an die niedrigste Adresse und 0x00 an die höchste Adresse gesetzt. Und wenn Sie (Menschen) Bytes intuitiv von niedrigen Adressen zu hohen Adressen lesen, lesen Sie FF 3C 18 00 aus. Dies ist die umgekehrte Reihenfolge, in der 0x00183CFF geschrieben wird.

Für BIG-Endianness liest und schreibt die CPU MSBs an niedrigeren Adressen und LSBs an höheren Adressen.

18
Gab是好人