Assembleur 80x86 | SHL |
---|---|
INTEL 8088+ | Shift Left |
Syntaxe
SHL opérandecible,1 | 8088+ |
SHL opérandecible,CL | 8088+ |
SHL 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 POUR FAIRE TANT QUE temp1 = 0 CF ← highorder ( destination ) destination ← destination décalage à gauche de 1 temp ← temp - 1 POUR FIN DE FAIRE SI count = 1 ALORS OF ← highorder ( destination ) ≠ CF SINON OF ← ? FIN SI |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
SHL reg/mem8, 1 | D0h /4 | Cette instruction effectue une décalage d'un seul bit vers la gauche de 8 bits d'un opérande registre ou mémoire 8 bits. |
SHL reg/mem8, CL | D2h /4 | Cette instruction effectue une décalage du nombre de bits spécifié par le registre CL vers la gauche de 8 bits d'un opérande registre ou mémoire 8 bits. |
SHL reg/mem8, imm8 | C0h /4 ib | Cette instruction effectue une 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. |
SHL reg/mem16, 1 | D1h /4 | Cette instruction effectue une décalage d'un seul bit vers la gauche de 16 bits d'un opérande registre ou mémoire 16 bits. |
SHL reg/mem16, CL | D3h /4 | Cette instruction effectue une décalage du nombre de bits spécifié par le registre CL vers la gauche de 16 bits d'un opérande registre ou mémoire 16 bits. |
SHL reg/mem16, imm8 | C1h /4 ib | Cette instruction effectue une décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 16 bits d'un opérande registre ou mémoire 16 bits. |
SHL reg/mem32, 1 | D1h /4 | Cette instruction effectue une décalage d'un seul bit vers la gauche de 32 bits d'un opérande registre ou mémoire 32 bits. |
SHL reg/mem32, CL | D3h /4 | Cette instruction effectue une décalage du nombre de bits spécifié par le registre CL vers la gauche de 32 bits d'un opérande registre ou mémoire 32 bits. |
SHL reg/mem32, imm8 | C1h /4 ib | Cette instruction effectue une décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 32 bits d'un opérande registre ou mémoire 32 bits. |
SHL reg/mem64, 1 | D1h /4 | Cette instruction effectue une décalage d'un seul bit vers la gauche de 64 bits d'un opérande registre ou mémoire 64 bits. |
SHL reg/mem64, CL | D3h /4 | Cette instruction effectue une 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. |
SHL reg/mem64, imm8 | C1h /4 ib | Cette instruction effectue une décalage du nombre de bits spécifié par la valeur immédiate vers la gauche de 64 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 :
- SHL 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 :
- SHL 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 :
- SHL BYTE PTR[BX],10
Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :
- Program ShlSamples;
-
- Function _Shl(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
- MOV AX,Value
- MOV CL,_Shift
- SHL AX,CL
- END;
-
- BEGIN
- WriteLn('1 SHL 0 = ',_Shl(1,0));
- WriteLn('1 SHL 1 = ',_Shl(1,1));
- WriteLn('1 SHL 2 = ',_Shl(1,2));
- WriteLn('1 SHL 3 = ',_Shl(1,3));
- WriteLn('1 SHL 4 = ',_Shl(1,4));
- WriteLn('2 SHL 0 = ',_Shl(2,0));
- WriteLn('2 SHL 1 = ',_Shl(2,1));
- WriteLn('2 SHL 2 = ',_Shl(2,2));
- WriteLn('2 SHL 3 = ',_Shl(2,3));
- WriteLn('2 SHL 4 = ',_Shl(2,4));
- END.
on obtiendra le résultat suivant :
1 SHL 0 = 11 SHL 1 = 2
1 SHL 2 = 4
1 SHL 3 = 8
1 SHL 4 = 16
2 SHL 0 = 2
2 SHL 1 = 4
2 SHL 2 = 8
2 SHL 3 = 16
2 SHL 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 836
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.