| Assembleur 80x86 |
SUB |
| INTEL 8088+ |
Arithmetic Substraction Unsigned |
Syntaxe
|
SUB opérandecible,opérandesource
|
Description
Cette instruction permet de soustraire une valeur à une opérande.
Algorithme
|
opérandecible ← opérandecible - opérandesource
|
Mnémonique
| SUB AL, imm8 |
2Ch ib |
Soustrait une valeur immédiate de 8 bits du registre AL et entrepose le résultat dans le registre AL. |
| SUB AX, imm16 |
2Dh iw |
Soustrait une valeur immédiate de 16 bits du registre AX et entrepose le résultat dans le registre AX. |
| SUB EAX, imm32 |
2Dh id |
Soustrait une valeur immédiate de 32 bits du registre EAX et entrepose le résultat dans le registre EAX. |
| SUB RAX, imm32 |
2Dh id |
Soustrait une valeur entière immédiate de 32 bits du registre RAX et entrepose le résultat dans le registre RAX. |
| SUB reg/mem8, imm8 |
80h /5 ib |
Soustrait une valeur entière immédiate de 8 bits de l'emplacement registre ou mémoire de 8 bits. |
| SUB reg/mem16, imm16 |
81h /5 iw |
Soustrait une valeur entière immédiate de 16 bits de l'emplacement registre ou mémoire de 16 bits. |
| SUB reg/mem32, imm32 |
81h /5 id |
Soustrait une valeur entière immédiate de 32 bits de l'emplacement registre ou mémoire de 32 bits. |
| SUB reg/mem64, imm32 |
81h /5 id |
Soustrait une valeur entière immédiate de 64 bits de l'emplacement registre ou mémoire de 32 bits. |
| SUB reg/mem16, imm8 |
83h /5 ib |
Soustrait une valeur entière immédiate de 16 bits de l'emplacement registre ou mémoire de 8 bits. |
| SUB reg/mem32, imm8 |
83h /5 ib |
Soustrait une valeur entière immédiate de 32 bits de l'emplacement registre ou mémoire de 8 bits. |
| SUB reg/mem64, imm8 |
83h /5 ib |
Soustrait une valeur entière immédiate de 64 bits de l'emplacement registre ou mémoire de 8 bits. |
| SUB reg/mem8, reg8 |
28h /r |
Soustrait un registre de 8 bits de l'emplacement registre ou mémoire de 8 bits. |
| SUB reg/mem16, reg16 |
29h /r |
Soustrait un registre de 16 bits de l'emplacement registre ou mémoire de 16 bits. |
| SUB reg/mem32, reg32 |
29h /r |
Soustrait un registre de 32 bits de l'emplacement registre ou mémoire de 32 bits. |
| SUB reg/mem64, reg64 |
29h /r |
Soustrait un registre de 64 bits de l'emplacement registre ou mémoire de 64 bits. |
| SUB reg8, reg/mem8 |
2Ah /r |
Soustrait de l'opérande d'emplacement registre ou mémoire de 8 bits d'un registre de 8 bits. |
| SUB reg16, reg/mem16 |
2Bh /r |
Soustrait de l'opérande d'emplacement registre ou mémoire de 16 bits d'un registre de 16 bits. |
| SUB reg32, reg/mem32 |
2Bh /r |
Soustrait de l'opérande d'emplacement registre ou mémoire de 32 bits d'un registre de 32 bits. |
| SUB reg64, reg/mem64 |
2Bh /r |
Soustrait de l'opérande d'emplacement registre ou mémoire de 64 bits d'un registre de 64 bits. |
Exceptions
| #SS(Pile) |
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é |
Exemple
Voici un exemple en Turbo Pascal montrant une utilisation de cet instruction :
- Program AsmSub;
-
- Var a,b,c,c_:Integer;
-
- Function Sub(X,Y:Integer):Integer;Assembler;ASM
- MOV AX,X
- SUB AX,Y
- END;
-
- BEGIN
- a := 1;
- b := 2;
- c := 3;
- c_ := -3;
- WriteLn('0 - 0 : ',Sub(0,0));
- WriteLn('0 - 1 : ',Sub(0,1));
- WriteLn('1 - 1 : ',Sub(1,1));
- WriteLn('1 - 2 : ',Sub(1,2));
- WriteLn('a - b : ',Sub(a,b));
- WriteLn('a - b - c : ',Sub(Sub(a,b),c));
- WriteLn('a - b - c_ : ',Sub(Sub(a,b),c_));
- WriteLn('c - c_ : ',Sub(c,c_));
- WriteLn('a - b - 20 : ',Sub(Sub(a,b),20));
- END.
|
on obtiendra le résultat suivant :
0 - 0 : 0
0 - 1 : -1
1 - 1 : 0
1 - 2 : -1
a - b : -1
a - b - c : -4
a - b - c_ : 2
c - c_ : 6
a - b - 20 : -21
|
Voir également
Instruction assembleur 80x86 - Instruction ADC
Instruction assembleur 80x86 - Instruction ADD
Instruction assembleur 80x86 - Instruction SBB
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 838
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 418
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 239.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 476 à 478.
|