Instructieset en assembly

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?

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. ADe waarde van a[4*i]
  2. BHet adres van a[i]
  3. CDe waarde van a[i]
Antwoord en toelichting tonen

Antwoord: C. De waarde van a[i]

Regel 1 schuift i 2 bits naar links om 4 × i te maken, regel 2 telt dit op bij het beginadres van de array om het adres van a[i] te berekenen, en regel 3 leest 4 bytes vanaf dat adres. Een int-element is 4 bytes, dus het i-de element ligt 4 × i bytes na het begin. „a[i]” in C wordt door de compiler vertaald in zo’n adresberekening en load.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Instructieset en assembly

  1. Welke uitspraak is juist over de methode waarbij rekeninstructies waarden in het geheugen rechtstreeks kunnen gebruiken, zoals de x86-instructie „add eax, [rbx]”?
  2. Welke uitleg over hoe huidige krachtige x86-CPU's complexe instructies intern uitvoeren is juist?
  3. Welke instructies voegt de RISC-V M-extensie toe aan de basisinstructieset voor gehele getallen?
  4. Wat is het belangrijkste doel van de RISC-V C-extensie (gecomprimeerde instructies)?
  5. Wat gebeurt er in het algemeen als „a * b” (vermenigvuldiging van ints) in C wordt gecompileerd voor een RV32I-CPU zonder M-extensie?