Überlegungen zu Little-Endian-Prozessoren und Registeroperationen

Prozessor ist Little-Endian.
Unter folgenden Adressen haben wir folgende Werte (Hexdezimalformat):

1000: FA 
1001: 46 
1002: 26
1003: C3

Nun führt der Prozessor die folgenden 16-bitsOperationen aus:
1. Laden in den R1Registerwert der Adresse 1000(denken Sie daran, dass die Operationen sind 16-bits).
2. XOR-Wert der Adresse 1002mit dem Wert des Registers R1.
3. Ergebnis von XOR unter Adresse speichern1010

Ich zeige Ihnen, wie ich verstehe, was Prozessoren tun:
1. Da der Prozessor Little-Endian ist, lädt er den R1Wert: 46 FA.
2. xor mit Wert der Adresse 1002mit R1ist:
XOR(C3 26, 46 FA)=85 DC
3. Nun, bei Adressen 1010und 1011haben wir:
1010:DC
1011:85

Sag mir bitte, geht es mir gut? Wenn ich dieses Problem richtig verstehe?

Ja, du hast es. Denken Sie daran, dass Little-Endian bedeutet, dass die Speicheradresse auf das niedrigstwertige Byte (das kleine Ende) von Multibyte-Werten zeigt.

Antworten (2)

Sie haben es völlig richtig und die Antwort von Transistor ist gut. Hier sind jedoch einige zusätzliche Informationen:

Beachten Sie, dass logische Operationen wie XOR, ANDund ORnur die gleichen Bits in den beiden Werten betrachten. In diesem Fall spielt es also keine Rolle, ob der Prozessor Little-Endian, Big-Endian oder wie herum die Operanden sind. Das Ergebnis sind dieselben Werte bei Adressen 1010und 1011unabhängig davon:

Little Endian:
C326 xor 46FA = 85DC (stored as DC 85)
46FA xor C326 = 85DC (stored as DC 85)
Big Endian:
26C3 xor FA46 = DC85 (stored as DC 85)
FA46 xor 26C3 = DC85 (stored at DC 85)

Nur wenn Sie mathematische Operationen anstelle von logischen verwenden, wie ADD, SUBund MUL, kommt es auf Little-Endian und Big-Endian an - und im Fall von auf SUBdie Reihenfolge der Operanden. An ADDaddiert die niedrigsten Bits der beiden Wörter, was einen Übertrag erzeugen kann. Es addiert dann die nächstniedrigeren Bits der zwei Wörter plus jeglichen Übertrag , was einen weiteren Übertrag erzeugen kann. Dies verschiebt die Bits nach oben, und so wird es wichtig, wo die Byte-Grenze ist - der Übertrag muss sich darüber bewegen!

Little Endian:
C326 + 46FA = 0A20 (stored as 20 0A)
46FA + C326 = 0A20 (stored as 20 0A)
Big Endian:
26C3 + FA46 = 2109 (stored as 21 09)
FA46 + 26C3 = 2109 (stored as 21 09)

Little Endian:
C326 - 46FA = 7C2C (stored as 2C 7C)
46FA - C326 = 83D4 (stored as D4 83)
Big Endian:
26C3 - FA46 = 2C5F (stored as 2C 5F)
FA46 - 26C3 = D383 (stored as D3 83)
Vielen Dank! Ich habe jedoch noch eine Frage: (Angenommen, Littler-Endian-Prozessor, 16-Bits-Operationen, Wert unter Adresse des Speichers 1000:5D, 1001:AF) Dann lädt der Prozessor den Wert der Adresse 1000in das Register R1. Dann R1ist der Wert von AF 5D. OK ?
Ja. Das ist 100% richtig.
Während des Ladens des Werts aus dem Speicher in das Register kehren die Little-Endian-Prozessorbytes um. Vielen Dank!

Sie haben Recht mit Ihrem Verständnis des "Endian" -Layouts ...

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Abbildung 1. Little-Endian- und Big-Endian-Speicherlayout. Quelle: Wikipedia .

... und Ihre Berechnungen stimmen.

Wenn jemand nachsehen möchte, schalten Sie den Taschenrechner Ihres Computers in den Programmiermodus und führen Sie die hexadezimale XOR-Berechnung durch.

Im Großen und Ganzen ist die Argumentation ok ?
Es sieht gut aus. Ich empfehle Ihnen, die Annahme für etwa einen Tag aufzuheben, um andere Antworten zu fördern. Ich erwarte nicht, dass uns jemand widerspricht, aber vielleicht hat jemand einen Tipp oder einen anderen Standpunkt, der auf andere Weise hilfreich ist.
ok, ich habe nicht akzeptiert.
Verflixt! Du hast eine bessere Antwort. ;^) Kein Problem.