ISA et assembleur

Une fois l'exécution du code RISC-V ci-dessus terminée, quelle est la valeur de t0 ?

      li   t0, 0
      li   t1, 4
loop: add  t0, t0, t1
      addi t1, t1, -1
      bnez t1, loop
  1. A4
  2. B10
  3. C6
Afficher la réponse et l'explication

Réponse : B. 10

On décrémente t1 à partir de 4 tout en ajoutant t1 à t0. t0 prend successivement les valeurs 4, 7, 9 et 10 ; lorsque t1 atteint 0, bnez (brancher si non nul) ne branche plus et l'on sort de la boucle. Le résultat est 4 + 3 + 2 + 1 = 10. bnez est la pseudo-instruction de « bne t1, zero, loop ». Décrémenter un compteur et le comparer à 0 est une forme courante, car elle ne nécessite pas de constante de comparaison.

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

Autres questions sur ISA et assembleur

  1. Les instructions de branchement conditionnel RISC-V (format B) représentent la distance jusqu'à la cible par un nombre d'octets signé sur 13 bits, dont le bit de poids faible, toujours 0, n'est pas stocké dans l'instruction. Quelle est approximativement la portée directe d'une instruction de branchement ?
  2. Quel est le fonctionnement correct de l'instruction RISC-V « jal ra, func » ?
  3. En quelle instruction la pseudo-instruction RISC-V « ret » est-elle réellement exécutée ?
  4. Quel est le principal objectif de la définition d'une convention d'appel (calling convention) ?
  5. Dans la convention d'appel standard de RISC-V, quels registres servent à transmettre les arguments entiers et la valeur de retour ?