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?
- Alb ergibt 0x00000080 (128), lbu ergibt 0xFFFFFF80 (-128)
- Blb ergibt 0xFFFFFF80 (-128), lbu ergibt 0x00000080 (128)
- 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.