Indicateur de demi-retenue
L'indicateur de demi-retenue (également appelé indicateur auxiliaire ou indicateur d'ajustement décimal) est un des bits du registre d’état de nombreuses familles de processeur avec, entre autres, l'Intel 8080, le Zilog Z80, le x86[1], et la série Motorola 68000[2]. Il indique qu'une retenue ou un emprunt a été généré sur les quatre bits de poids faible de l'accumulateur à la suite de l’exécution d'une instruction arithmétique. Il est principalement utilisé dans les instructions arithmétique décimal (DCB).
Usage
Normalement, un processeur qui utilise l'arithmétique binaire (soit presque tous les processeurs modernes) additionnera deux octets de 8 bits en suivant les règles de l'addition binaire. Par exemple, l'addition de 2516 et 4816 donne 6D16. L'addition est cependant plus compliqué pour les valeurs décimales codé binaire (DCB) où chaque bout de 4 bits représente un chiffre décimal. Par exemple, le résultat de l'addition des valeurs décimales 25 et 48, encodé 2516 et 4816 en DCB, donne 6D16. Dans la mesure où le bout faible de cette valeur est un chiffre non décimal (D), il doit être ajusté en y ajoutant 0616 pour donner le DCB corrigé 7316, ce qui représente la valeur décimale 73.
0010 0101 25
+ 0100 1000 48
-----------
0110 1101 6D, résultat intermédiaire
+ 0110 06, ajustement
-----------
0111 0011 73, résultat ajusté
De même, additionner les valeurs DCB 3916 et 4816 donne 8116. Ce résultat n'a pas de bout faible non décimal, mais il entraîne une retenue du chiffre de poids faible (les quatre bits de poids faible) dans le chiffre de poids fort (les quatre bits de poids fort). Le processeur l'indique en mettant l'indicateur de demi-retenue. Cette valeur est également corrigé par l'addition de 0616 à 8116 pour donner le DCB corrigé 8716.
0011 1001 39 + 0100 1000 48 ----------- 1000 0001 81, résultat intermédiaire + 0110 06, ajustement ----------- 1000 0111 87, résultat ajusté
Enfin, si le résultat d'une addition est un chiffre de poids fort non décimal, alors 6016 doit être ajoutée à la valeur pour donner bon DCB. Par exemple, l'addition de 7216 et 7316 donne E516. Dans la mesure où le chiffre de poids fort du résultat de cette somme est non décimal (E), y ajouter 6016 donne le DCB corrigé 14516. (Notez que le chiffre 1 à l'avant est en fait un bit de retenue.)
0111 0010 72 + 0111 0011 73 ----------- 1110 0101 E5, résultat intermédiaire + 0110 60, ajustement ----------- 1 0100 0101 145, résultat ajusté
En résumant, pour pouvoir produire une valeur en DCB correcte:
- Si le résultat d'une addition binaire contient un chiffre de poids faible non décimal ou entraîne l'indicateur de demi-retenue, le résultat doit être corrigé par l'ajout de 0616.
- Si le résultat d'une addition binaire contient un chiffre de poids fort non décimal, le résultat doit encore être corrigé par l'ajout de 6016.