ISA et assembleur

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 ?

  1. ACela devient un appel à une fonction de bibliothèque qui effectue la multiplication par décalages et additions répétés
  2. BLa multiplication étant indisponible, une erreur de compilation survient
  3. CL'instruction mul de l'extension M est émise telle quelle et ajoutée automatiquement à l'exécution
Afficher la réponse et l'explication

Réponse : A. Cela devient un appel à une fonction de bibliothèque qui effectue la multiplication par décalages et additions répétés

Pour un CPU sans multiplieur, le compilateur remplace la multiplication par un appel à une fonction de bibliothèque auxiliaire comme __mulsi3. Cette fonction calcule le produit comme une multiplication posée : elle examine un à un les bits de l'un des nombres et, pour chaque 1, ajoute l'autre nombre décalé. Le calcul est correct, mais des dizaines de fois plus lent qu'un multiplieur matériel. Omettre une extension de l'ISA réduit les circuits au prix d'un traitement plus lent.

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

Autres questions sur ISA et assembleur

  1. Quelle affirmation concernant le delay slot de branchement des anciens MIPS notamment (règle selon laquelle l'instruction suivant immédiatement un branchement est exécutée que le branchement soit pris ou non) est correcte ?
  2. Lors de l'exécution d'une instruction lw en RV64I (64 bits), comment la valeur de 32 bits lue est-elle placée dans le registre de 64 bits ?
  3. Quelle description de l'ABI (interface binaire d'application) est correcte ?
  4. En RISC-V, quelle instruction réalise généralement un appel par pointeur de fonction en C, « (*fp)(x) » ?
  5. Quelle affirmation concernant deux CPU adoptant la même architecture de jeu d'instructions (ISA) est correcte ?