Instructieset en assembly
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?
- AEén keer addi gebruiken en de 32-bits immediate rechtstreeks schrijven
- BMet lui de bovenste 20 bits instellen en met addi de onderste 12 bits optellen
- 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.