Section courante

A propos

Section administrative du site

Assembleur 80x86

ADC

INTEL 8088+, x86-64 arithmetic Add with Carry

Syntaxe

ADC Opérande Cible,Opérande Source

Paramètres

Nom Description
Opérande Cible Ce paramètre permet d'indiquer l'opérande recevant le résultat
Opérande Source Ce paramètre permet d'indiquer l'opérande à ajouter au résultat

Description

Cette instruction, des plus indispensable, additionne 2 quantités numériques sur 8, 16, 32 ou 64 bits et ajoute ensuite la valeur de l'indicateur de retenue, lequel est contenu dans le drapeau CF (CARRY FLAG), à la somme obtenu. Le résultat pourra naturellement être placé en mémoire ou dans un registre. Cette opération tient donc compte de la retenue éventuelle ainsi que de l'addition des 8, 16, 32 ou 64 bits de poids faible pour continuer l'addition des 8, 16, 32 ou 64 bits de poids fort.

Remarques

Algorithme

MODULE ADC(Opérande Cible,Opérande Source)
   Opérande CibleOpérande Cible + Quantité Source + drapeau CF

Mnémonique

Instruction Opcode Description
ADC AL, imm8 14h ib Ajout immédiate de 8 bits à AL + CF
ADC AX, imm16 15h iw Ajout immédiate de 16 bits à AX + CF
ADC EAX, imm32 15h id Ajout immédiate de 32 bits à EAX + CF
ADC RAX, imm32 15h id Ajout immédiate de 32 bits à RAX + CF
ADC reg/mem8, imm8 80h /2 ib Ajout immédiate de 8 bits à registre/mémoire + CF
ADC reg/mem16, imm16 81h /2 iw Ajout immédiate de 16 bits à registre/mémoire 16 bits + CF
ADC reg/mem32, imm32 81h /2 id Ajout immédiate de 32 bits à registre/mémoire 32 bits + CF
ADC reg/mem64, imm32 81h /2 id Ajout immédiate de 32 bits entier à registre/mémoire 64 bits + CF
ADC reg/mem16, imm8 83h /2 ib Ajout immédiate de 8 bits entier à registre/mémoire 16 bits + CF
ADC reg/mem32, imm8 83h /2 ib Ajout immédiate de 8 bits entier à registre/mémoire 16 bits + CF
ADC reg/mem64, imm8 83h /2 ib Ajout immédiate de 8 bits entier à registre/mémoire 64 bits + CF
ADC reg/mem8, reg8 10h /r Ajout registre de 8 bits à registre/mémoire 8 bits + CF
ADC reg/mem16, reg16 11h /r Ajout registre de 16 bits à registre/mémoire 16 bits + CF
ADC reg/mem32, reg32 11h /r Ajout registre de 32 bits à registre/mémoire 32 bits + CF
ADC reg/mem64, reg64 11h /r Ajout registre de 64 bits à registre/mémoire 64 bits + CF
ADC reg8, reg/mem8 12h /r Ajout registre de 8 bits à registre/mémoire 8 bits + CF
ADC reg16, reg/mem16 13h /r Ajout registre de 16 bits à registre/mémoire 16 bits + CF
ADC reg32, reg/mem32 13h /r Ajout registre de 32 bits à registre/mémoire 32 bits + CF
ADC reg64, reg/mem64 13h /r Ajout registre de 64 bits à registre/mémoire 64 bits + CF

Cycles d'horloge

Opérande Cycle d'horloge Taille en octets
8086 80286 80386 80486
reg,reg 3 2 2 1 2
mem,reg 16+EA 7 6 3 2 à 4
reg,mem 9+EA 7 7 2 2 à 4
mem,immed 17+EA 7 7 3 3 à 4
reg,immed 4 3 2 1 3 à 6
accum,immed 4 3 2 1 2 à 3

Affectations des registres de drapeaux

Cette instruction affectera les bits du registre de drapeaux de la façon suivante :

Drapeau Description
AF Ce bit vaut 1 si un ajustement est provoquée par le résultat de cette opération autrement il vaudra 0.
CF Ce bit vaut 1 si une retenue décimale est provoquée par le résultat de cette opération autrement il vaudra 0.
OF Ce bit vaut 1 si un débordement est provoquée par le résultat de cette opération autrement il vaudra 0.
PF Ce bit vaut 1 si une parité est provoquée par le résultat de cette opération autrement il vaudra 0.
SF Ce bit vaut 1 si un signe est provoquée par le résultat de cette opération autrement il vaudra 0.
ZF Ce bit vaut 1 si une valeur zéro est obtenu par le résultat de cette opération autrement il vaudra 0.

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#SS(Pile non-canonique) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
    X L'opérande de destination n'est pas dans un segment non écrivable
    X Un segment de données nulle est utilisé comme référence mémoire
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé

Exemples

L'exemple suivant permet d'effectuer l'opération «AL = AL + BL + Retenue» :

  1. ADC AL,BL

L'exemple suivant permet d'effectuer l'opération «CL = CL + 44h + Retenue» :

  1. ADC CL,44h

L'exemple suivant permet d'ajouter l'octet de AL au contenu de l'emplacement de mémoire du segment de données spécifiées par BX avec la somme entreposée dans le même emplacement de mémoire. Le drapeau de retenue est également ajouté à la destination si CF est fixé :

  1. ADC [BX],AL

Le contenu des mots de l'emplacement de mémoire du segment de données spécifiées par SI + 2 s'ajoute à BX avec la somme entreposée dans BX. La retenue (CF) est également ajouté à la destination si CF est fixé :

  1. ADC BX,[SI+2]

Le contenu des mots de l'emplacement de mémoire du segment de données spécifiées par TEMP + DI s'ajoute à BX avec la somme entreposée dans BX. La retenue (CF) est également ajouté à la destination si CF est fixé.

  1. ADC BX,TEMP[DI]

Cet exemple permet d'effectuer l'addition de la retenue d'une addition du registre AL sur le registre AH :

  1. MOV AX,0001h
  2. ADD AL,0FFh
  3. ADC AH,00h

Ce programme retournera donc la valeur 0100h dans le registre AX.

Voir également

Instruction assembleur 80x86 - Instruction ADD
Instruction assembleur 80x86 - Instruction SBB
Instruction assembleur 80x86 - Instruction SUB

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 802
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 126, 401
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 57 à 58.
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 75 à 78.

Dernière mise à jour : Lundi, le 1 septembre 2014