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 ?
- Alb : 0x00000080 (128), lbu : 0xFFFFFF80 (-128)
- Blb : 0xFFFFFF80 (-128), lbu : 0x00000080 (128)
- 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.