Wat is Immediate (directe waarde)?

Constante die rechtstreeks in een instructie is ingebed. Bij addi in RISC-V is het een 12-bits geheel getal met teken, dat vóór gebruik teken-uitgebreid wordt.

Japanse benaming: 即値

“Immediate (directe waarde)” komt voor in 9 oefenvragen uit 1 onderwerpen, bijv. Instructieset en assembly.

Vakgebied: Instructieset en assembly

Nu oefenen: vragen over Immediate (directe waarde)

De immediate van de RISC-V-instructie addi is een geheel getal met teken van 12 bits. Welk bereik kan deze immediate weergeven?

  1. A0 tot 4095
  2. B-2048 tot 2047
  3. C-4096 tot 4095
Antwoord en toelichting tonen

Antwoord: B. -2048 tot 2047

Met 12 bits in two's complement kunnen waarden van -2¹¹ = -2048 tot 2¹¹ - 1 = 2047 worden weergegeven. De immediate wordt vóór de berekening tekenuitgebreid naar 32 bits (bij RV64 naar 64 bits), dus negatieve getallen kunnen zonder meer worden opgeteld. Om een constante buiten dit bereik te gebruiken, worden meerdere instructies gecombineerd, bijvoorbeeld de bovenste 20 bits instellen met lui en daarna de onderste 12 bits optellen met addi.

Wat is de gebruikelijke methode in RISC-V om een 32-bits constante die niet in een immediate van 12 bits past (bijvoorbeeld 0x12345678) in een register te plaatsen?

  1. AEén keer addi gebruiken en de 32-bits immediate rechtstreeks schrijven
  2. BMet lui de bovenste 20 bits instellen en met addi de onderste 12 bits optellen
  3. CConstanten kunnen niet worden gebruikt en moeten altijd uit invoer worden gelezen
Antwoord en toelichting tonen

Antwoord: B. Met lui de bovenste 20 bits instellen en met addi de onderste 12 bits optellen

lui (load upper immediate) plaatst een immediate van 20 bits in de bits 31 tot 12 van het register en maakt de onderste 12 bits 0. Als daarna met addi de onderste 12 bits worden opgeteld, kan elke 32-bits constante worden gemaakt. Als in assembleertaal „li a0, 0x12345678” wordt geschreven, breidt de assembler dit zo nodig uit tot deze twee instructies. Bij ISA's met vaste instructielengte is het gebruikelijk grote constanten in delen te maken.

“Immediate (directe waarde)” in de toelichting

Vragen met “Immediate (directe waarde)” (9)

  1. De immediate van de RISC-V-instructie addi is een geheel getal met teken van 12 bits. Welk bereik kan deze immediate weergeven?
  2. Wat is de gebruikelijke methode in RISC-V om een 32-bits constante die niet in een immediate van 12 bits past (bijvoorbeeld 0x12345678) in een register te plaatsen?
  3. Welke werking van de RISC-V-instructie auipc (add upper immediate to PC) is juist?
  4. Wat is het juiste verschil tussen de RISC-V-instructies „add” en „addi”?
  5. Wat is de waarde van register a2 na uitvoering van de bovenstaande RISC-V-code?
  6. Wat is de juiste combinatie om in RISC-V de constante 0x12345FFF met de twee instructies lui en addi te maken?
  7. Welke 32-bits waarde staat in t0 nadat in RISC-V (RV32I) „addi t0, zero, -1” is uitgevoerd?
  8. Welke werking van de RISC-V-instructie „slt t0, a0, a1” is juist?
  9. Met welke factor van de waarde van a0 is het resultaat t0 van de RISC-V-instructie „slli t0, a0, 3” te vergelijken (overloop buiten beschouwing gelaten)?

Verwante termen

Twee-complement (two's complement) Assembler Instructiesetarchitectuur (ISA) Numerieke apertuur (NA) Linker Aanroepconventie (calling convention) ABI (application binary interface) Adresseringsmodus Bladfunctie (leaf function) Branch delay slot

Naar de woordenlijst