Instructieset en assembly
In het geheugen staat in één byte 0x80. Welke combinatie van waarden is juist als dit byte met de RISC-V-instructies lb en lbu in een 32-bits register wordt gelezen?
- Alb geeft 0x00000080 (128), lbu geeft 0xFFFFFF80 (-128)
- Blb geeft 0xFFFFFF80 (-128), lbu geeft 0x00000080 (128)
- CBeide geven 0x00000080 (128)
Antwoord en toelichting tonen
Antwoord: B. lb geeft 0xFFFFFF80 (-128), lbu geeft 0x00000080 (128)
lb (load byte) beschouwt het gelezen byte als getal met teken en kopieert het hoogste bit naar de bovenste 24 bits (tekenuitbreiding). 0x80 heeft hoogste bit 1, dus wordt het 0xFFFFFF80, dus -128. lbu (load byte unsigned) vult de bovenste bits met 0 (nuluitbreiding), dus 128. Bij het lezen van signed char en unsigned char in C kiest de compiler tussen deze twee instructies.