Bytes aus Datein - Bytes im Speicher

Liebes Forum!

Ich beschäftige mich seit einiger Zeit mit der PE Spezifikation von Microsoft. Hier wird beispielsweise erklärt, dass in einer PE Datei nach der Signatur “PE\0\0” (the letters “P” and “E” followed by two null bytes) in den nächsten zwei Bytes ein Wert für die Maschine steht. In meinem Fall sollte das IMAGE_FILE_MACHINE_I386 also 0x14c sein. Im Hex-Editor (Hxd, bzw. auch schon mit anderen probiert) steht an dieser Stelle aber 4C 01. Wenn ich mir ein kleines Programm bastle und dort einen short mit dem Wert 0x14c in eine Datei schreibe, steht dan dort ebenfalls 4C 01. Anscheinend werden also beim Schreiben in Datein die Bytes vertauscht.

Meine Frage ist, ob das generell so ist, bzw. in wie fern gleiche Daten (z.B. Integer) auf der HD anders aussehen als im RAM. Mir gehts jetzt nicht darum ein Problem zu lösen, aber ich möchte gerne wissen, wiso das so ist.

Ich würde mich über jede Antwort, Link etc. freuen.
mfg dixxi

Hallo dixxi,

Meine Frage ist, ob das generell so ist, bzw. in wie fern
gleiche Daten (z.B. Integer) auf der HD anders aussehen als im
RAM. Mir gehts jetzt nicht darum ein Problem zu lösen, aber
ich möchte gerne wissen, wiso das so ist.

Nein, das ist umgekehrt :wink:
Die Daten sind in der Datei so abgelegt wie im RAM.
http://de.wikipedia.org/wiki/Little_Endian

Little-Endian hatte bei 8-Bit CPUs einen kleinen Vorteil im Opcode-Decoder.
Jede Ladeoperation hat zuerst den Zugriff auf das niederwertige Byte erzeugt. In dieser Zeit konnte zeitlich parallel untersucht werden ob der Opcode einen 16-Bit Zugriff enthält und der zweite Zugriff für das höherwertige Byte „nachgelegt“ werden.

Damalige CPUs arbeiteten noch fast ausschliesslich mit MikroCode, d.h. jeder Maschinenbefehl löste ein Mini-Programm aus.

Hier einmal die beiden Abläufe in Pseudocode für LDA:

Little-Endian Big-Endian

Read LSB If 16-Bit
If 16-Bit Read MSB
 Read MSB EndIf
EndIf Read LSB

Technisch liegt das Problem darin, dass das If mindestens einen Takt zur Ausführung benötigt.
Bei Little-Endian kann das gleichzeitig mit „Read LSB“ durchgeführt werden.
Bei Big-Endian benötigt der Befehl länger für die Ausführung, bzw. der Hardwareaufwand für den Decoder wird grösser.

MfG Peter(TOO)

lieber Peter !

Meine Frage ist, ob das generell so ist, bzw. in wie fern
gleiche Daten (z.B. Integer) auf der HD anders aussehen als im
RAM. Mir gehts jetzt nicht darum ein Problem zu lösen, aber
ich möchte gerne wissen, wiso das so ist.

Nein, das ist umgekehrt :wink:
Die Daten sind in der Datei so abgelegt wie im RAM.
http://de.wikipedia.org/wiki/Little_Endian

Vielen Dank für deine Antwort! Ich hab mir den Artikel auf Wikipedia durchgelesen und glaube jetzt die Sache verstanden zu haben. Ist wirklich gut erklärt.

Vielen Dank nochmals!
mfg dixxi