Section courante

A propos

Section administrative du site

Assembleur 80x86

SAL

INTEL 8088+ Shift Arithmetic Left

Syntaxe

SAL opérandecible,1 8088+
SAL opérandecible,CL 8088+
SAL opérandecible,nombredebits 80286+

Paramètres

Nom Description
opérandecible Ce paramètre permet d'indiquer une expression de type entier subissant le «décalage de bits vers la gauche»
nombredebits Ce paramètre permet d'indiquer le décalage de bit vers la gauche à effectuer
CL Ce paramètre permet d'indiquer la partie basse du registre de compteur utilisé pour spécifié le nombre de décalage à appliquer à l'opérande cible.

Description

Cette instruction permet d'effectuer une rotation des bits vers la gauche en réinsérant le bit dans l'indicateur de retenue (CF).

Algorithme

temp ← compteur ∩ 001Fh
BOUCLE FAIRE TANT QUE temp1 = 0
   CF ← highorder ( destination )
   destination ← destination décalage à gauche de 1
   temp ← temp - 1
BOUCLE FIN DE FAIRE
SI count = 1 ALORS
   OF ← highorder ( destination ) ≠ CF
SINON
   OF ← ?
FIN SI

Mnémonique

Instruction Opcode Description
SAL reg/mem8, 1 D0h /4 Cette instruction effectue un décalage d'un seul bit vers la gauche d'un opérande registre ou mémoire 8 bits.
SAL reg/mem8, CL D2h /4 Cette instruction effectue un décalage du nombre de bits spécifié par le registre CL vers la gauche d'un opérande registre ou mémoire 8 bits.
SAL reg/mem8, imm8 C0h /4 ib Cette instruction effectue un décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 8 bits d'un opérande registre ou mémoire 8 bits.
SAL reg/mem16, 1 D1h /4 Cette instruction effectue un décalage d'un seul bit vers la gauche d'un opérande registre ou mémoire 16 bits.
SAL reg/mem16, CL D3h /4 Cette instruction effectue un décalage du nombre de bits spécifié par le registre CL vers la gauche d'un opérande registre ou mémoire 16 bits.
SAL reg/mem16, imm8 C1h /4 ib Cette instruction effectue un décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 8 bits d'un opérande registre ou mémoire 16 bits.
SAL reg/mem32, 1 D1h /4 Cette instruction effectue un décalage d'un seul bit vers la gauche d'un opérande registre ou mémoire 32 bits.
SAL reg/mem32, CL D3h /4 Cette instruction effectue un décalage du nombre de bits spécifié par le registre CL vers la gauche d'un opérande registre ou mémoire 32 bits.
SAL reg/mem32, imm8 C1h /4 ib Cette instruction effectue un décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 8 bits d'un opérande registre ou mémoire 32 bits.
SAL reg/mem64, 1 D1h /4 Cette instruction effectue un décalage d'un seul bit vers la gauche d'un opérande registre ou mémoire 64 bits.
SAL reg/mem64, CL D3h /4 Cette instruction effectue un décalage du nombre de bits spécifié par le registre CL vers la gauche de 64 bits d'un opérande registre ou mémoire 64 bits.
SAL reg/mem64, imm8 C1h /4 ib Cette instruction effectue un décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 8 bits d'un opérande registre ou mémoire 64 bits.

Cycles d'horloge

Opérande Cycle d'horloge Taille en octets
8086 80286 80386 80486
reg,1 2 2 3 3 2
mem,1 15+EA 7 7 4 2 à 4
reg,CL 8+4n 5+n 3 3 2
mem,CL 20+EA+4n 8+n 7 4 2 à 4
reg,immed8 - 5+n 3 2 3
mem,immed8 - 8+n 7 4 3 à 5

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 une décalage logique du registre ECX de 10 places :

  1. SAL ECX,10

L'exemple suivant permet d'effectuer une décalage logique du registre ECX du nombre de places spécifié par le registre CL :

  1. SAL ECX,CL

L'exemple suivant permet d'effectuer une décalage logique du contenu d'un octet du segment de données spécifié par le registre BX vers la gauche de 10 :

  1. SAL BYTE PTR[BX],10

Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :

  1. Program SalSamples;
  2.  
  3. Function _Sal(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
  4.  MOV AX,Value
  5.  MOV CL,_Shift
  6.  SAL AX,CL
  7. END;
  8.  
  9. BEGIN
  10.  WriteLn('1 SAL 0 = ',_Sal(1,0));
  11.  WriteLn('1 SAL 1 = ',_Sal(1,1));
  12.  WriteLn('1 SAL 2 = ',_Sal(1,2));
  13.  WriteLn('1 SAL 3 = ',_Sal(1,3));
  14.  WriteLn('1 SAL 4 = ',_Sal(1,4));
  15.  WriteLn('2 SAL 0 = ',_Sal(2,0));
  16.  WriteLn('2 SAL 1 = ',_Sal(2,1));
  17.  WriteLn('2 SAL 2 = ',_Sal(2,2));
  18.  WriteLn('2 SAL 3 = ',_Sal(2,3));
  19.  WriteLn('2 SAL 4 = ',_Sal(2,4));
  20. END.

on obtiendra le résultat suivant :

1 SAL 0 = 1
1 SAL 1 = 2
1 SAL 2 = 4
1 SAL 3 = 8
1 SAL 4 = 16
2 SAL 0 = 2
2 SAL 1 = 4
2 SAL 2 = 8
2 SAL 3 = 16
2 SAL 4 = 32

Voir également

Instruction assembleur 80x86 - Instruction SAR
Instruction assembleur 80x86 - Instruction SHR
Instruction assembleur 80x86 - Instruction SHLD
Instruction assembleur 80x86 - Instruction SHRD

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 831
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 415
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 216.
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 400 à 408.

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