Qu'est-ce que Extension de signe ?

Lors de l'élargissement d'un entier signé à un plus grand nombre de bits, recopie du bit de poids fort (signe) dans tous les bits supérieurs. La valeur est conservée. Remplir les bits supérieurs de 0 s'appelle l'extension par zéros.

Nom japonais: 符号拡張

« Extension de signe » apparaît dans 2 questions d'entraînement réparties sur 1 thèmes, dont ISA et assembleur.

Domaine: ISA et assembleur

S'entraîner : questions sur Extension de signe

En RISC-V (RV32I), après exécution de « addi t0, zero, -1 », quelle valeur de 32 bits contient t0 ?

  1. A0xFFFFFFFF
  2. B0x00000FFF
  3. C0x80000001
Afficher la réponse et l'explication

Réponse : A. 0xFFFFFFFF

L'immédiat -1 s'écrit 0xFFF sur 12 bits. addi l'étend en signe à 32 bits, c'est-à-dire recopie le bit de poids fort 1 dans tous les bits supérieurs, ce qui donne 0xFFFFFFFF, soit -1 en complément à deux. Grâce à l'extension de signe, il suffit d'additionner un immédiat négatif pour soustraire. Si l'on remplissait les bits supérieurs de zéros, on obtiendrait 0x00000FFF = 4095, ce qui change le sens.

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.

« Extension de signe » dans les explications

Questions mentionnant « Extension de signe » (2)

  1. En RISC-V (RV32I), après exécution de « addi t0, zero, -1 », quelle valeur de 32 bits contient t0 ?
  2. 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 ?

Termes associés

Complément à deux ABI (interface binaire d'application) Adressage relatif au PC Adresse de retour Architecture load-store Assembleur Cadre de pile (stack frame) Codes de condition Convention d'appel Créneau de délai de branchement (delay slot)

Retour au glossaire