Befehlssatz und Assembler

Bei Little-Endian-RISC-V wurde ein Register mit 0x12345678 per „sw“ an die Adresse 0x100 geschrieben. Welchen Wert liefert danach das Lesen des Bytes an Adresse 0x101 mit „lbu“?

  1. A0x34
  2. B0x56
  3. C0x78
Antwort und Erläuterung anzeigen

Antwort: B. 0x56

Bei Little Endian werden die Bytes des Werts beginnend mit dem niederwertigen an kleineren Adressen abgelegt. Bei 0x12345678 stehen bei 0x100 der Wert 0x78, bei 0x101 der Wert 0x56, bei 0x102 der Wert 0x34 und bei 0x103 der Wert 0x12. Das Byte an 0x101 ist somit 0x56. Bei Big Endian folgen ab 0x100 die Werte 0x12, 0x34, …, und 0x101 enthielte 0x34. Beim Umgang mit Netzwerk- und Dateiformaten ist dieser Unterschied zu beachten.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Was kann geschehen, wenn bei RISC-V die Adresse des lw-Befehls, der 4 Byte liest, kein Vielfaches von 4 ist (nicht ausgerichtet)?
  2. Um das Wievielfache des Werts von a0 ist t0 nach dem RISC-V-Befehl „slli t0, a0, 3“ größer (Überlauf nicht beachtet)?
  3. In a0 steht die Anfangsadresse eines Arrays a vom Typ int (4 Byte), in a1 der Index i. Was lädt der obige Code in a2?
  4. Welche Aussage zu Verfahren ist richtig, bei denen Rechenbefehle wie „add eax, [rbx]“ bei x86 Werte im Speicher direkt verwenden können?
  5. Welche Erklärung, wie heutige leistungsfähige x86-CPUs komplexe Befehle intern ausführen, ist richtig?