Section courante

A propos

Section administrative du site

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érandecibleopé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» :

  1. SBB AX,BX

L'exemple suivant permet d'effectuer l'opération «CL = CL - 2 - Retenue» :

  1. 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 :

  1. 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 :

  1. 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» :

  1. Program SBBSamples;
  2.  
  3. Var _AX:Word;
  4.  
  5. BEGIN
  6.  ASM
  7.   MOV AX,00FEh
  8.   SBB AL,0FFh
  9.   SBB AH,00h
  10.   MOV _AX,AX
  11.  END;
  12.  WriteLn(_AX);
  13. END.

on obtiendra le résultat suivant :

65535

Voir é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.

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