Befehlssatz und Assembler

Im Speicher steht in einem Byte der Wert 0x80. Welche Kombination von Werten ist richtig, wenn dieses Byte mit den RISC-V-Befehlen lb und lbu in ein 32-Bit-Register geladen wird?

  1. Alb ergibt 0x00000080 (128), lbu ergibt 0xFFFFFF80 (-128)
  2. Blb ergibt 0xFFFFFF80 (-128), lbu ergibt 0x00000080 (128)
  3. CBeide ergeben 0x00000080 (128)
Antwort und Erläuterung anzeigen

Antwort: B. lb ergibt 0xFFFFFF80 (-128), lbu ergibt 0x00000080 (128)

lb (load byte) betrachtet das gelesene Byte als vorzeichenbehaftet und kopiert das höchste Bit in die oberen 24 Bit (Vorzeichenerweiterung). 0x80 hat das höchste Bit 1, ergibt also 0xFFFFFF80, d. h. −128. lbu (load byte unsigned) füllt oben mit 0 auf (Nullerweiterung) und ergibt 128. Beim Lesen von signed char und unsigned char in C verwendet der Compiler diese beiden Befehle jeweils passend.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Befehlssatz und Assembler

  1. Welcher Unterschied zwischen RISC-V und x86 beim Mechanismus bedingter Verzweigungen ist richtig?
  2. Welche Wirkung hat der RISC-V-Befehl „slt t0, a0, a1“?
  3. Welchen Wert hat t0, wenn der obige RISC-V-Code ausgeführt wurde?
  4. Der bedingte Verzweigungsbefehl von RISC-V (B-Format) gibt den Abstand zum Ziel als vorzeichenbehaftete 13-Bit-Bytezahl an, deren niedrigstes Bit stets 0 ist und nicht in den Befehl aufgenommen wird. Welcher Bereich wird von einem Verzweigungsbefehl direkt erreicht?
  5. Welche Wirkung hat der RISC-V-Befehl „jal ra, func“?