Assembleur 80x86 | ROL |
---|---|
INTEL 8088+ | Rotate Left |
Syntaxe
ROL opérandecible,1 | 8088+ |
ROL opérandecible,CL | 8088+ |
ROL opérandecible,nombredebits | 80286+ |
Paramètres
Nom | Description |
---|---|
opérandecible | Ce paramètre permet d'indiquer une expression de type entier subissant la «rotation de bits vers la gauche» |
nombredebits | Ce paramètre permet d'indiquer la rotation 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 rotation à 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 le bit le plus à droite libéré.
Algorithme
temp ← max ( compteur, 31) SI temp = 1 ALORS OF ← highbit ( destination ) ≠ CF SINON OF ← ? FIN SI BOUCLE FAIRE TANT QUE temp <> 0 X ← highbit ( destination ) destination ← (destination décalage à gauche de 1 ) + x temp ← temp - 1 FIN BOUCLE DE TANT QUE CF ← highbit ( destination ) |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
ROL reg/mem8, 1 | D0h /0 | Cette instruction effectue une rotation de 8 bits d'un opérande registre ou mémoire 8 bits d'un seul bit vers la gauche. |
ROL reg/mem8, CL | D2h /0 | Cette instruction effectue une rotation de 8 bits d'un opérande registre ou mémoire 8 bits avec le nombre de bits spécifié par le registre CL vers la gauche. |
ROL reg/mem8, imm8 | C0h /0 ib | Cette instruction effectue une rotation de 8 bits d'un opérande registre ou mémoire 8 bits avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
ROL reg/mem16, 1 | D1h /0 | Cette instruction effectue une rotation de 16 bits d'un opérande registre ou mémoire 16 bits d'un seul bit vers la gauche. |
ROL reg/mem16, CL | D3h /0 | Cette instruction effectue une rotation de 16 bits d'un opérande registre ou mémoire 16 bits avec le nombre de bits spécifié par le registre CL vers la gauche. |
ROL reg/mem16, imm8 | C1h /0 ib | Cette instruction effectue une rotation de 16 bits d'un opérande registre ou mémoire 16 bits avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
ROL reg/mem32, 1 | D1h /0 | Cette instruction effectue une rotation de 32 bits d'un opérande registre ou mémoire 32 bits d'un seul bit vers la gauche. |
ROL reg/mem32, CL | D3h /0 | Cette instruction effectue une rotation de 32 bits d'un opérande registre ou mémoire 32 bits avec le nombre de bits spécifié par le registre CL vers la gauche. |
ROL reg/mem32, imm8 | C1h /0 ib | Cette instruction effectue une rotation de 32 bits d'un opérande registre ou mémoire 32 bits avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
ROL reg/mem64, 1 | D1h /0 | Cette instruction effectue une rotation de 64 bits d'un opérande registre ou mémoire 64 bits d'un seul bit vers la gauche. |
ROL reg/mem64, CL | D3h /0 | Cette instruction effectue une rotation de 64 bits d'un opérande registre ou mémoire 64 bits avec le nombre de bits spécifié par le registre CL vers la gauche. |
ROL reg/mem64, imm8 | C1h /0 ib | Cette instruction effectue une rotation de 64 bits d'un opérande registre ou mémoire 64 bits avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
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 rotation de SI vers la gauche de 10 places :
- ROL SI,10
L'exemple suivant permet d'effectuer une rotation du contenu du mot du segment de données spécifié par le registre BX de 2 positions vers la gauche :
- ROL WORD PTR[BX],2
Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :
- Program RolSamples;
-
- Function _Rol(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
- MOV AX,Value
- MOV CL,_Shift
- ROL AX,CL
- END;
-
- BEGIN
- WriteLn('1 ROL 0 = ',_Rol(1,0));
- WriteLn('1 ROL 1 = ',_Rol(1,1));
- WriteLn('1 ROL 2 = ',_Rol(1,2));
- WriteLn('1 ROL 3 = ',_Rol(1,3));
- WriteLn('1 ROL 4 = ',_Rol(1,4));
- WriteLn('2 ROL 0 = ',_Rol(2,0));
- WriteLn('2 ROL 1 = ',_Rol(2,1));
- WriteLn('2 ROL 2 = ',_Rol(2,2));
- WriteLn('2 ROL 3 = ',_Rol(2,3));
- WriteLn('2 ROL 4 = ',_Rol(2,4));
- END.
on obtiendra le résultat suivant :
1 ROL 0 = 11 ROL 1 = 2
1 ROL 2 = 4
1 ROL 3 = 8
1 ROL 4 = 16
2 ROL 0 = 2
2 ROL 1 = 4
2 ROL 2 = 8
2 ROL 3 = 16
2 ROL 4 = 32
Voir également
Instruction assembleur 80x86 - Instruction RCL
Instruction assembleur 80x86 - Instruction RCR
Instruction assembleur 80x86 - Instruction ROR
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 830
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 211.
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 334 à 341.