ISA et assembleur

Un octet en mémoire contient 0x80. Quelle combinaison correspond aux valeurs obtenues en chargeant cet octet dans un registre de 32 bits avec les instructions RISC-V lb et lbu ?

  1. Alb : 0x00000080 (128), lbu : 0xFFFFFF80 (-128)
  2. Blb : 0xFFFFFF80 (-128), lbu : 0x00000080 (128)
  3. CLes deux donnent 0x00000080 (128)
Afficher la réponse et l'explication

Réponse : B. lb : 0xFFFFFF80 (-128), lbu : 0x00000080 (128)

lb (load byte) considère l'octet lu comme signé et recopie le bit de poids fort dans les 24 bits supérieurs (extension de signe). 0x80 ayant son bit de poids fort à 1, on obtient 0xFFFFFF80, soit -128. lbu (load byte unsigned) remplit les bits supérieurs de 0 (extension par zéros), d'où 128. Lors de la lecture de signed char et unsigned char en C, le compilateur choisit entre ces deux instructions.

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

Autres questions sur ISA et assembleur

  1. Quelle est la différence correcte entre RISC-V et x86 concernant le mécanisme de branchement conditionnel ?
  2. Quel est le fonctionnement correct de l'instruction RISC-V « slt t0, a0, a1 » ?
  3. Une fois l'exécution du code RISC-V ci-dessus terminée, quelle est la valeur de t0 ?
  4. 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 ?
  5. Quel est le fonctionnement correct de l'instruction RISC-V « jal ra, func » ?