ADC |
Addition avec retenue |
|---|---|
| ARM | |
Syntaxe
| ADC{S} {cond} {Rd},Rn,operand2 |
Paramètres
| Nom | Description |
|---|---|
| S | Ce paramètre optionnel permet d'indiquer le suffixe. Si ce paramètre est spécifié, les drapeaux de condition sont mise à jour dans le résultat de l'opérande |
| cond | Ce paramètre optionnel permet d'indiquer le code de condition |
| Rd | Ce paramètre permet d'indiquer le registre de destination. |
| Rn | Ce paramètre permet d'indiquer le registre contenant le premier opérande. |
| operand2 | Ce paramètre permet d'indiquer le deuxième opérande flexible. |
Description
Cette instruction permet d'effectuer une addition en ajoutant également la valeur du drapeau de retenue.
Remarques
- Utilisation du drapeau Carry : Contrairement à une addition classique (ADD), l'instruction ADC prend en compte le drapeau de retenue (Carry flag, C) du registre d'état du programme (CPSR). Cela permet d'effectuer des additions en cascade, utiles pour des opérations sur des nombres de grande taille (par exemple, l'addition de valeurs 64 bits sur une architecture 32 bits).
- Variantes 32 et 64 bits : L'instruction ADC peut être utilisée en version 32 bits (ADC Wd, Wn, Wm) ou en version 64 bits (ADC Xd, Xn, Xm), selon la valeur du champ sf. Quand sf vaut 0, on utilise les registres W (32 bits), et quand sf vaut 1, on utilise les registres X (64 bits).
- Effet sur les drapeaux du processeur : L'instruction ADC peut affecter plusieurs drapeaux du Current Program Status Register (CPSR). Notamment, le drapeau Carry (C) est mis à jour selon le résultat de l'opération. Le drapeau Zero (Z) est activé si le résultat est nul, et le drapeau Negative (N) est mis à 1 si le bit de poids fort du résultat est à 1.
- Utilisation dans l'arithmétique multi-précision : ADC est une instruction essentielle pour le calcul sur des nombres dépassant la taille d'un registre. Par exemple, pour additionner deux nombres 128 bits en ARM 64 bits, on peut utiliser ADC en combinaison avec ADCS (Add with Carry, Set Flags) pour propager la retenue entre les différentes parties des nombres.
- Différence avec ADD : ADD effectue une addition simple entre deux registres, tandis que ADC ajoute en plus la valeur du drapeau Carry. Cela signifie qu'ADC est particulièrement utile dans des contextes où une retenue a pu être générée lors d'une opération précédente.
- Encodage binaire et champ SF : L'encodage de ADC dépend de la valeur de sf (bit 31) pour déterminer si l'on travaille avec des registres W ou X. L'instruction est codée avec un champ d'opération fixe et les registres source et destination sont placés dans les champs Rd, Rn, Rm de l'instruction.
- Instruction complémentaire ADCS : L'instruction ADCS (Add with Carry and Set flags) est une version de ADC mettant à jour les drapeaux du processeur. Cela permet de chaîner plusieurs additions en cascade tout en suivant l'évolution du drapeau Carry.
- Non utilisable avec des valeurs immédiates : Contrairement à ADD, permettant d'additionner un registre avec une valeur immédiate, ADC ne fonctionne qu'avec trois registres. Pour ajouter une constante en tenant compte du Carry, il faut d'abord charger cette valeur dans un registre avant d'utiliser ADC.
Exemple
L'exemple suivant permet d'effectuer l'addition des parties hautes avec prise en compte de la retenue :
- ADC X5, X1, X3
Dernière mise à jour : Dimanche, le 12 novembre 2017