Assembleur 80x86 | AAA |
---|---|
INTEL 8088+ | Ascii Adjust after Addition |
Syntaxe
AAA |
Description
Cette instruction permet d'adapter le résultat obtenu par l'addition de 2 valeurs en format DCB. Puisque le processeur additionne ces valeurs comme s'il s'agissait de nombres normaux, des débordements peuvent se produire dans les sommes. Afin de remédier à ce problème, la commande AAA offre de convertir le résultat de l'addition de 2 valeurs de format DCB non compactées en une valeur de format DCB non compactée. Elle cherche la somme de l'addition dans le registre AL. Pour que cette instruction réagisse correctement, il faut qu'elle soit lancée directement après l'addition de 2 valeurs de format DCB, étant donné que la valeur des indicateurs du micro-processeur revêt une importance particulière lors de l'exécution de cette commande.
Remarque
- L'instruction AAA n'est pas support dans le Long Mode proposé par le mode 64 bits x86-64 de Intel 64 et AMD64.
Algorithme
MODULE AAA * Vaut 1 si c'est vrai retenue d'AL ← AL > 0F9h SI ( ( AL ∩ 0Fh > 9 ) U ( AF = 1 ) ALORS AL ← ( AL + 6 ) ∩ 0Fh AH ← AH + 1 + retenue d'AL Drapeau AF ← 1 Drapeau CF ← 1 SINON AL ← 0Fh Drapeau AF ← 0 Drapeau CF ← 0 FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
AAA | 37h | Cette instruction permet de créer un nombre dépaqueté BCD (invalide en mode 64-bits) |
Cycles d'horloge
Instruction | Opcode | 8086 | 8088 | 80186 | 80286 | 80386 | i486 | Pentium | Cx486SLC | Cx486DX | IBM 486BL3X | UMC U5S |
---|---|---|---|---|---|---|---|---|---|---|---|---|
AAA | 37h | 4 | 4 | 8 | 3 | 4 | 3 | 3 | 4 | 4 | 4 | 1 |
Affectations des registres de drapeaux
Cette instruction affectera les bits du registre de drapeaux de la façon suivante :
Drapeau | Position | Description |
---|---|---|
CF | 0 | Fixé à 1 si la décimale est retenue, sinon il est fixé à 0. |
PF | 2 | Indéfini |
AF | 4 | Fixé à 1 si la décimal est retenue, sinon il est fixé à 0. |
ZF | 6 | Indéfini |
SF | 7 | Indéfini |
TF | 8 | Non affecté |
IF | 9 | Non affecté |
DF | 10 | Non affecté |
OF | 11 | Indéfini |
IOPL | 12 et 13 | Non affecté |
NT | 14 | Non affecté |
RF | 16 | Non affecté |
WM | 17 | Non affecté |
AC | 18 | Non affecté |
VIF | 19 | Non affecté |
VIP | 20 | Non affecté |
ID | 21 | Non affecté |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#UD(Opcode invalide) | X | Cette instruction est exécutée en mode 64-bits |
Exemples
Cet exemple permet d'effectuer une addition BCD :
Ce programme retournera donc la valeur 0101h dans le registre AX.
L'exemple suivant permet de mettre le code ASCII 1 dans le registre AL, ensuite il ajoute le résultat et on obtient 6Ah, puis il ajuste le résultat à l'aide de l'instruction AAA, on obtient 0100h et finalement on additionne 3030h au registre AX :
Ce programme retournera donc la valeur 10 dans le registre AX.
Voir également
Instruction assembleur 80x86 - Instruction AAD
Instruction assembleur 80x86 - Instruction AAM
Instruction assembleur 80x86 - Instruction AAS
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 801
Le grand livre pour programmer en Assembleur sur PC, Holger Schakel, 1995, ISBN: 2-7429-0442-5, page 144.
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 53.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 67 à 68.