Instructieset en assembly

Welke werking van de RISC-V-instructie auipc (add upper immediate to PC) is juist?

  1. ASlaat de waarde van PC ongewijzigd op in het geheugen
  2. BTelt een 12 bits naar links geschoven immediate van 20 bits op bij het eigen adres (PC) en plaatst dit in een register
  3. CSpringt onvoorwaardelijk naar een met een immediate opgegeven adres en herschrijft PC
Antwoord en toelichting tonen

Antwoord: B. Telt een 12 bits naar links geschoven immediate van 20 bits op bij het eigen adres (PC) en plaatst dit in een register

auipc plaatst alleen „PC + (immediate << 12)” in een register. Als daarna met jalr of lw de offset van de onderste 12 bits wordt opgeteld, kunnen adressen van functies en data binnen een bereik van ongeveer ±2 GiB vanaf de huidige positie worden aangeduid als afstand vanaf PC. Daardoor kunnen in position-independent code, die overal in het geheugen kan worden geladen, verre functies worden aangeroepen en globale variabelen worden gelezen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. Welke 32-bits waarde staat in t0 nadat in RISC-V (RV32I) „addi t0, zero, -1” is uitgevoerd?
  2. 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?
  3. Welk verschil tussen RISC-V en x86 in de werking van voorwaardelijke sprongen is juist?
  4. Welke werking van de RISC-V-instructie „slt t0, a0, a1” is juist?
  5. Wat is de waarde van t0 nadat de bovenstaande RISC-V-code is uitgevoerd?