0 Daumen
338 Aufrufe

Frage:

Wie kann man das Wort 0x12345678 in little endian darstellen?

Probleme folgende Aufgabe zu lösen:

Aufgabe:

list ist eine Liste mit einzelnen aufeinanderfolgenden Bytes.

list:
.word 0x12345678, 0xA5A5A5A5, 0xCEFABEBA, 0x01020304

Zeichnen Sie die Anordnung der Daten im Speicher bei (wortweiser) Darstellung
(32bit) mit den dazugehörenden Speicheradressen unter Annahme des ARM Little
Endian-Schemas, wobei das Label „list:“ an der Adresse 0x40000010 steht.

Ist diese Darstellung für das erste Wort richtig? In dem Fall wäre ja 1 = MSB und 8 = LSB und der Speicherwachstum würde in diese Richtung gehen ->

0x40000010      0x4000018      0x40000020        0x40000028        = Adresse

7 8 5 6 3 4 1 2 = Wort

Das Skript gibt nicht an wie es mit der Adresseninkrementierung aussieht und im Internet fand ich bisher nur die Antwort, dass es immer um eins erhöht wird also quasi:

0x40000010      0x4000011      0x40000012        0x40000013        = Adresse

7 8              5 6            3 4                1 2          = Wort

Aber das macht für mich irgendwie kein Sinn. Könnte mir das jemand bitte erklären?

Von der Reihenfolge dachte ich bisher immer man kann sich das so merken:

Bei Wort: 0x12345678

Big Endian: | 12 | 34 | 56 | 78 |        //bleibt gleich
Little Endian: | 78 | 56 | 34 | 12 |     // über Kreuz vertauscht

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Wie kann man das Wort 0x12345678 in little endian darstellen?

Um das Wort 0x12345678 im Little Endian Format darzustellen, muss die Byte-Reihenfolge im Vergleich zum ursprünglichen, im Big Endian Format dargestellten Wert umgekehrt werden.

In Big Endian Repräsentation (wie ursprünglich gegeben), zeigt die Reihenfolge der Bytes von links nach rechts die Reihenfolge von höchstem Stellenwert (MSB, Most Significant Byte) zu niedrigstem Stellenwert (LSB, Least Significant Byte). Das bedeutet, dass das Byte mit dem höchsten Wert zu Beginn steht.

In Little Endian Format (wie gefragt) wird dies umgekehrt: Das LSB steht am Anfang und das MSB am Ende. Dies bedeutet, dass die Reihenfolge der Bytes invertiert wird.

Für das gegebene Wort \(0x12345678\) sieht das so aus:

- Big Endian: | 12 | 34 | 56 | 78 |
- Little Endian: | 78 | 56 | 34 | 12 |

Wenn wir uns speziell die Speicheradressierung im Kontext der Aufgabe ansehen, bei der angenommen wird, dass das Label „list:“ an der Adresse \(0x40000010\) steht und ein 32-Bit (4 Bytes) Wort-Schema verwendet wird, dann wird jedes Wort in aufeinanderfolgenden Speicherblöcken abgelegt, wobei jedes Byte eindeutig adressierbar ist.

Das erste Wort \(0x12345678\) im Little Endian Schema zu adressieren, sieht wie folgt aus:

- \(0x40000010\) enthält den Wert \(0x78\),
- \(0x40000011\) enthält den Wert \(0x56\),
- \(0x40000012\) enthält den Wert \(0x34\),
- \(0x40000013\) enthält den Wert \(0x12\).

Alle weiteren Wörter folgen diesem Schema, wobei jedes neue Wort an der nächsten verfügbaren 32-Bit-Grenze beginnt. Also, der nächste Wert (angenommen \(0xA5A5A5A5\)) wird bei \(0x40000014\) starten und so weiter.

Auf Basis dessen wäre eine korrekte Darstellung der Anordnung der Daten im Speicher unter Verwendung des Little Endian Schemas (nur das erste Wort ausgeführt):


Adressen  : Inhalt
0x40000010: 78
0x40000011: 56
0x40000012: 34
0x40000013: 12


Es ist wichtig zu beachten, dass die gegebene Annahme in Ihrem Skript, dass die Adressen in einer ungewöhnlichen Weise inkrementiert werden (wie von \(0x40000010\) zu \(0x4000018\)), nicht korrekt ist. Stattdessen sollte die Speicheradresse sequenziell für jedes Byte um 1 erhöht werden, ausgehend von der Startadresse \(0x40000010\), um der realen Adressierung in den meisten Speichersystemen zu entsprechen.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community