Instructieset en assembly
Leer met meerkeuzevragen de basis van instructiesets en assembly, zoals instructieformaten, adresseringsmodi, de basisinstructies van RISC-V, aanroepconventies en stackframes.
Instructieset en assembly: kernpunten
Een instructiesetarchitectuur (ISA) is de overeenkomst tussen software en hardware. Daarin is vastgelegd welke instructies er zijn, met welke bitpatronen ze worden voorgesteld en hoe registers en geheugen worden aangeduid. Zolang dezelfde ISA wordt gevolgd, draait hetzelfde programma ook op CPU's met een andere interne opbouw.
Assemblytaal is een voor mensen leesbare notatie van machinecode-instructies. Wie de basisinstructies van RISC-V, het gebruik van registers, het doorgeven van argumenten en retourwaarden bij functieaanroepen (aanroepconventie) en het opbouwen van stackframes kent, begrijpt de code die een compiler genereert en hoe een programma op de CPU draait.
Alle vragen over Instructieset en assembly (50)
- Welke uitspraak over twee CPU's met dezelfde instructiesetarchitectuur (ISA) is juist?
- Welke eigenschap van een load-store-architectuur zoals RISC-V is juist?
- Welke eigenschap van het RISC-V-register x0 (zero) is juist?
- Welke algemene gehele-getalregisters heeft RISC-V RV32I (de basisinstructieset voor gehele getallen van 32 bits)?
- Welke relatie tussen assembleertaal en machinecode is juist?
- Door welke instructie vervangt de assembler in werkelijkheid de RISC-V-pseudo-instructie „nop” (doe niets)?
- Wat is het juiste verschil tussen de RISC-V-instructies „add” en „addi”?
- Wat is de waarde van register a2 na uitvoering van de bovenstaande RISC-V-code?
- Welke werking van de RISC-V-instructie „lw t0, 8(sp)” is juist?
- Hoe wordt het sprongdoel label weergegeven in de RISC-V-voorwaardelijke sprong-instructie „beq a0, a1, label”?
- Welk voordeel van PC-relatieve adressering voor sprongen is juist?
- Welke uitspraak over de instructielengte van basisinstructies van RISC-V en instructies van x86 is juist?
- Welk voordeel van een vaste instructielengte is het meest passend?
- In RISC-V-instructies zijn de velden voor registers (rd, rs1, rs2) elk 5 bits. Wat is de juiste reden?
- De immediate van de RISC-V-instructie addi is een geheel getal met teken van 12 bits. Welk bereik kan deze immediate weergeven?
- 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?
- Wat is de juiste combinatie om in RISC-V de constante 0x12345FFF met de twee instructies lui en addi te maken?
- Welke werking van de RISC-V-instructie auipc (add upper immediate to PC) is juist?
- Welke 32-bits waarde staat in t0 nadat in RISC-V (RV32I) „addi t0, zero, -1” is uitgevoerd?
- 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?
- Welk verschil tussen RISC-V en x86 in de werking van voorwaardelijke sprongen is juist?
- Welke werking van de RISC-V-instructie „slt t0, a0, a1” is juist?
- Wat is de waarde van t0 nadat de bovenstaande RISC-V-code is uitgevoerd?
- 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?
- Welke werking van de RISC-V-instructie „jal ra, func” is juist?
- Als welke instructie wordt de RISC-V-pseudo-instructie „ret” in werkelijkheid uitgevoerd?
- Wat is het belangrijkste doel van het vastleggen van een aanroepconventie (calling convention)?
- Welke registers worden in de standaard RISC-V-aanroepconventie gebruikt om gehele-getalargumenten en retourwaarden door te geven?
- Waar worden in de standaard RISC-V-aanroepconventie het 9e en 10e argument doorgegeven bij het aanroepen van een functie met 10 gehele-getalargumenten?
- Wat betekent het dat s0 tot s11 in de RISC-V-aanroepconventie „callee-saved”-registers zijn?
- In de RISC-V-aanroepconventie zijn t0 tot t6 „caller-saved”-registers. Wat is de juiste handelwijze als een functie de waarde die hij in t0 heeft gezet ook na het aanroepen van een andere functie wil gebruiken?
- Bij functies die geen andere functies aanroepen (bladfuncties, leaf functions) hoeft ra vaak niet op de stack te worden opgeslagen. Wat is de juiste reden?
- Wat is het juiste doel van het uitvoeren van „addi sp, sp, -16” aan het begin van een RISC-V-functie?
- In de standaard RISC-V-aanroepconventie moet de stackpointer sp bij het betreden van een functie op een veelvoud van 16 bytes zijn uitgelijnd. Wat is de meest passende reden?
- De bovenstaande code is het begin (prologue) van een functie. Wat doet dit deel?
- Welk voordeel heeft het gebruik van de frame pointer (in RISC-V s0/fp) in een functie?
- Wat gebeurt er als men bij het schrijven van een recursieve functie die zichzelf aanroept in RISC-V vergeet ra op de stack op te slaan?
- Op een little-endian RISC-V is het register met 0x12345678 met „sw” naar adres 0x100 geschreven. Wat is de waarde als daarna met „lbu” het byte op adres 0x101 wordt gelezen?
- Wat kan er gebeuren als het adres van een lw-instructie die 4 bytes leest in RISC-V geen veelvoud van 4 is (niet uitgelijnd)?
- 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)?
- a0 bevat het beginadres van een array a van het type int (4 bytes) en a1 bevat de index i. Wat leest de bovenstaande code in a2?
- Welke uitspraak is juist over de methode waarbij rekeninstructies waarden in het geheugen rechtstreeks kunnen gebruiken, zoals de x86-instructie „add eax, [rbx]”?
- Welke uitleg over hoe huidige krachtige x86-CPU's complexe instructies intern uitvoeren is juist?
- Welke instructies voegt de RISC-V M-extensie toe aan de basisinstructieset voor gehele getallen?
- Wat is het belangrijkste doel van de RISC-V C-extensie (gecomprimeerde instructies)?
- Wat gebeurt er in het algemeen als „a * b” (vermenigvuldiging van ints) in C wordt gecompileerd voor een RV32I-CPU zonder M-extensie?
- Welke uitspraak is juist over de branch delay slot die bij het vroegere MIPS en dergelijke bestond (de afspraak dat de ene instructie direct na een sprong-instructie wordt uitgevoerd, ongeacht of er wordt gesprongen)?
- Hoe komt de gelezen 32-bits waarde in het 64-bits register wanneer de lw-instructie wordt uitgevoerd in het 64-bits RV64I?
- Welke omschrijving van de ABI (application binary interface) is juist?
- Met welke instructie wordt een aanroep via een functiepointer in C, „(*fp)(x)”, in RISC-V gewoonlijk uitgevoerd?
Andere onderwerpen in Computersystemen
- Computerarithmetiek IEEE 754, vaste komma, afrondingsfouten
- Compilers Parsing, SSA, optimalisatie, registertoewijzing
- Linker, loader en uitvoerbare formaten ELF, symbolen, relocatie, dynamisch linken
- Besturingssysteem en hardware Interrupts, systeemaanroepen, paginafouten
- Geheugenhiërarchie en prestaties Cache, vervangingsbeleid, drie soorten misses
- Multicore en synchronisatie MESI, atomaire instructies, geheugenbarrières
- GPU-programmeren Warps, gedeeld geheugen, coalescing, occupancy
- AI-hardware en softwarestack Inferentie vs training, kwantisatie, roofline
- Embedded systemen en firmware GPIO, UART/SPI/I2C, RTOS
- Hardwarebeschrijvingstalen en verificatie Verilog, latches, toestandsmachines, testbenches
- Interfaces en busstandaarden PCIe, USB, SerDes, CXL
- Prestatiemeting en profiling Wet van Amdahl, CPI, knelpunten
- Hardwarebeveiliging Side channels, secure boot, TEE, PUF
- Energiebeheer (softwaregestuurd) DVFS, power gating, slaaptoestanden