Revenir au plan du site
Traitement des nombres en base 10 stockés au format BCD
DAA
Cette instruction sert à ajuster la valeur d'un octet quand on s'en sert comme si il contenait deux chiffres décimaux. Les 4 bits du haut et les 4 bits du bas sont supposés contenir chacun une valeur de 0 à 9. Ainsi, quand on réalise des additions ou des soustractions, on appelle l'instruction DAA pour corriger les retenues à effectuer sur le registre.
Le fonctionnement de l'instruction est le suivant :
- Si les 4 bits les moins significatifs de A contiennent un nombre plus grand que 9 ou que le flag H=1, alors on ajoute #06 au registre A.
- Si les 4 bits les plus significatifs de A sont aussi supérieurs à 9 ou que le flag C=1, alors on ajoute #60 au registre A et on positionne éventuellement la retenue pour le calcul suivant.
Quelques exemples d'exécution de l'instruction DAA :
LD A,valeur |
ADD A,valeur |
Résultat de l'addition |
Valeur de A après DAA |
Flag C |
#55 | #11 | #66 | #66 (55+11=66) | 0 |
#59 | #12 | #6B | #71 (59+12=71) | 0 |
#90 | #10 | #A0 | #00 (90+10=100) | 1 |
#99 | #01 | #9A | #00 (99+1=100) | 1 |
La retenue (flag C) est mise dès lors qu'on dépasse la valeur 99. Il faut la reporter sur l'octet BCD suivant.