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?

  1. Alb geeft 0x00000080 (128), lbu geeft 0xFFFFFF80 (-128)
  2. Blb geeft 0xFFFFFF80 (-128), lbu geeft 0x00000080 (128)
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. Welk verschil tussen RISC-V en x86 in de werking van voorwaardelijke sprongen is juist?
  2. Welke werking van de RISC-V-instructie „slt t0, a0, a1” is juist?
  3. Wat is de waarde van t0 nadat de bovenstaande RISC-V-code is uitgevoerd?
  4. De voorwaardelijke sprong-instructies van RISC-V (B-formaat) drukken de afstand tot het sprongdoel uit in een aantal bytes met teken van 13 bits, waarvan het laagste bit altijd 0 is en niet in de instructie wordt opgenomen. Welk bereik bereikt een sprong-instructie rechtstreeks ongeveer?
  5. Welke werking van de RISC-V-instructie „jal ra, func” is juist?