Section courante

A propos

Section administrative du site

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

Algorithme

MODULE AAA
   * Vaut 1 si c'est vrai
   retenue d'ALAL > 0F9h
   SI ( ( AL ∩ 0Fh > 9 ) U ( AF = 1 ) ALORS
      AL ← ( AL + 6 ) ∩ 0Fh
      AHAH + 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 :

  1. MOV AX,0005h
  2. MOV CL,06h
  3. ADD AL,CL
  4. AAA

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 :

  1. MOV AL,31h
  2. ADD AL,39h
  3. AAA
  4. ADD AX,3030h

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.

Dernière mise à jour : Samedi, le 2 août 2014