Assembleur 80x86 | SBB |
---|---|
INTEL 8088+ | Subtraction With Borrow |
Syntaxe
SBB opérandecible,opérandesource |
Paramètres
Nom | Description |
---|---|
opérandecible | Ce paramètre permet d'indiquer l'opérande de base sur lequel l'opération sera effectué. |
opérandesource | Ce paramètre permet d'indiquer la quantité à soustraire |
Description
Cette instruction permet de soustraire avec l'indicateur de retenue (CF) une valeur à une opérande.
Algorithme
MODULE SBB(opérandecible,opérandesource) opérandecible ← opérandecible - (opérandesource + CF) |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
SBB AL, imm8 | 1Ch ib | Soustrait une valeur immédiate de 8 bits du registre AL avec la retenue. |
SBB AX, imm16 | 1Dh iw | Soustrait une valeur immédiate de 16 bits du registre AX avec la retenue. |
SBB EAX, imm32 | 1Dh id | Soustrait une valeur immédiate de 32 bits du registre EAX avec la retenue. |
SBB RAX, imm32 | 1Dh id | Soustrait une valeur entière immédiate de 32 bits du registre RAX avec la retenue. |
SBB reg/mem8, imm8 | 80h /3 ib | Soustrait une valeur immédiate de 8 bits d'un emplacement registre ou mémoire de 8 bits avec la retenue. |
SBB reg/mem16, imm16 | 81h /3 iw | Soustrait une valeur immédiate de 16 bits d'un emplacement registre ou mémoire de 16 bits avec la retenue. |
SBB reg/mem32, imm32 | 81h /3 id | Soustrait une valeur immédiate de 32 bits d'un emplacement registre ou mémoire de 32 bits avec la retenue. |
SBB reg/mem64, imm32 | 81h /3 id | Soustrait une valeur immédiate de 32 bits d'un emplacement registre ou mémoire de 64 bits avec la retenue. |
SBB reg/mem16, imm8 | 83h /3 ib | Soustrait une valeur immédiate de 8 bits d'un emplacement registre ou mémoire de 16 bits avec la retenue. |
SBB reg/mem32, imm8 | 83h /3 ib | Soustrait une valeur entière immédiate de 8 bits d'un emplacement registre ou mémoire de 32 bits avec la retenue. |
SBB reg/mem64, imm8 | 83h /3 ib | Soustrait une valeur entière immédiate de 8 bits d'un emplacement registre ou mémoire de 64 bits avec la retenue. |
SBB reg/mem8, reg8 | 18h /r | Soustrait un registre de 8 bits d'un emplacement registre ou mémoire de 8 bits avec la retenue. |
SBB reg/mem16, reg16 | 19h /r | Soustrait un registre de 16 bits d'un emplacement registre ou mémoire de 16 bits avec la retenue. |
SBB reg/mem32, reg32 | 19h /r | Soustrait un registre de 32 bits d'un emplacement registre ou mémoire de 32 bits avec la retenue. |
SBB reg/mem64, reg64 | 19h /r | Soustrait un registre de 32 bits d'un emplacement registre ou mémoire de 32 bits avec la retenue. |
SBB reg8, reg/mem8 | 1Ah /r | Soustrait un emplacement registre ou mémoire de 8 bits avec la retenue d'un registre de 8 bits. |
SBB reg16, reg/mem16 | 1Bh /r | Soustrait un emplacement registre ou mémoire de 16 bits avec la retenue d'un registre de 16 bits. |
SBB reg32, reg/mem32 | 1Bh /r | Soustrait un emplacement registre ou mémoire de 32 bits avec la retenue d'un registre de 32 bits. |
SBB reg64, reg/mem64 | 1Bh /r | Soustrait un emplacement registre ou mémoire de 32 bits avec la retenue d'un registre de 32 bits. |
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 à 6 |
reg,immed | 4 | 3 | 2 | 1 | 3 à 4 |
accum,immed | 4 | 3 | 2 | 1 | 2 à 3 |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#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é |
Exemples
L'exemple suivant permet d'effectuer l'opération «AX = AX - BX - Retenue» :
- SBB AX,BX
L'exemple suivant permet d'effectuer l'opération «CL = CL - 2 - Retenue» :
- SBB CL,2
L'exemple suivant permet de soustraire le registre AL et la retenue de l'emplacement de mémoire du segment de données spécifié par le registre DI :
- SBB [DI],AL
L'exemple suivant permet de soustraire 3 et la retenue des données d'octets de mémoire spécifiées par le registre DI :
- SBB BYTE PTR[DI],3
Voici un exemple, en Turbo Pascal, permettant d'effectuer une soustraction d'un nombre 16 bits par tranche de 8 bits en utilisant l'instruction «SBB» :
on obtiendra le résultat suivant :
65535Voir également
Instruction assembleur 80x86 - Instruction SUB
Instruction assembleur 80x86 - Instruction ADD
Instruction assembleur 80x86 - Instruction ADC
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 832
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 416
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 221.
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 409 à 412.