ISA et assembleur

a0 contient l'adresse de début d'un tableau a de type int (4 octets), et a1 l'indice i. Que charge le code ci-dessus dans a2 ?

slli t0, a1, 2
add  t0, a0, t0
lw   a2, 0(t0)
  1. ALa valeur de a[4*i]
  2. BL'adresse de a[i]
  3. CLa valeur de a[i]
Afficher la réponse et l'explication

Réponse : C. La valeur de a[i]

La 1re ligne décale i de 2 bits vers la gauche pour obtenir 4×i, la 2e l'ajoute à l'adresse de début du tableau pour obtenir l'adresse de a[i], et la 3e lit 4 octets à cette adresse. Un élément int faisant 4 octets, le i-ième élément se trouve 4×i octets après le début. Le compilateur traduit « a[i] » en C par un tel calcul d'adresse suivi d'un chargement.

S'entraîner sur ce thème Retour au thème

Autres questions sur ISA et assembleur

  1. Quelle affirmation concernant les architectures où les instructions arithmétiques peuvent utiliser directement des valeurs en mémoire, comme l'instruction x86 « add eax, [rbx] », est correcte ?
  2. Quelle description de la manière dont les CPU x86 hautes performances actuels exécutent en interne les instructions complexes est correcte ?
  3. Quelles instructions l'extension M de RISC-V ajoute-t-elle au jeu d'instructions entières de base ?
  4. Quel est le principal objectif de l'extension C (instructions compressées) de RISC-V ?
  5. En compilant « a * b » (multiplication de deux int) en C pour un CPU RV32I sans extension M, que se passe-t-il généralement ?