Assembleur 80x86 | RCL |
---|---|
INTEL 8088+ | Rotate Through Carry Left |
Syntaxe
RCL opérandecible,1 | 8088+ |
RCL opérandecible,CL | 8088+ |
RCL 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 l'indicateur de retenue (CF) ainsi que dans le bit le plus à droite libéré.
Algorithme
temp ← max (nombredebits, 31) SI temp = 1 ALORS OF ← highbit(opérandecible) ≠ CF SINON OF ← ? FIN SI Valeur ← concaténation ( CF, opérandecible ) FAIRE TANT QUE temp ≠ 0 X ← highbit ( valeur ) valeur ← ( valeur décalage à gauche 1 ) + X temp ← temp - 1 FIN DE FAIRE CF ← highbit ( valeur ) opérandecible ← valeur |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
RCL reg/mem8,1 | D0h /2 | Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 8 bits) d'un seul bit vers la gauche. |
RCL reg/mem8, CL | D2h /2 | Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 8 bits) avec le nombre de bits spécifié par le registre CL vers la gauche. |
RCL reg/mem8, imm8 | C0h /2 ib | Cette instruction effectue une rotation de 9 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 8 bits) avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
RCL reg/mem16, 1 | D1h /2 | Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 16 bits) d'un seul bit vers la gauche. |
RCL reg/mem16, CL | D3h /2 | Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 16 bits) avec le nombre de bits spécifié par le registre CL vers la gauche. |
RCL reg/mem16, imm8 | C1h /2 ib | Cette instruction effectue une rotation de 17 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 16 bits) avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
RCL reg/mem32, 1 | D1h /2 | Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 32 bits) d'un seul bit vers la gauche. |
RCL reg/mem32, CL | D3h /2 | Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 32 bits) avec le nombre de bits spécifié par le registre CL vers la gauche. |
RCL reg/mem32, imm8 | C1h /2 ib | Cette instruction effectue une rotation de 33 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 32 bits) avec le nombre de bits spécifié par la valeur immédiate vers la gauche. |
RCL reg/mem64, 1 | D1h /2 | Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 64 bits) d'un seul bit vers la gauche. |
RCL reg/mem64, CL | D3h /2 | Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement registre ou mémoire 64 bits) avec le nombre de bits spécifié par le registre CL vers la gauche. |
RCL reg/mem64, imm8 | C1h /2 ib | Cette instruction effectue une rotation de 65 bits (drapeau de retenue 1 bit + emplacement 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 | 9 | 3 | 2 |
mem,1 | 15+EA | 7 | 10 | 4 | 2 à 4 |
reg,CL | 8+4n | 5+n | 9 | 8 à 30 | 2 |
mem,CL | 20+EA+4n | 8+n | 10 | 9 à 31 | 2 à 4 |
reg,immed8 | - | 5+n | 9 | 8 à 30 | 3 |
mem,immed8 | - | 8+n | 10 | 9 à 31 | 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 de faire une rotation vers la gauche de 6 places avec le drapeau de retenue :
- RCL BX,6
L'exemple suivant permet de tourner AH vers la gauche pendant la retenue du nombre spécifié dans CL :
- RCL AH,CL
L'exemple suivant permet de tourner le contenu d'un octet de l'emplacement mémoire spécifié par le registre BX vers la gauche par le biais de 10 positions :
- RCL BYTE PTR[BX],10
Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :
- Program RClSamples;
-
- Function _Rcl(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
- MOV AX,Value
- MOV CL,_Shift
- RCL AX,CL
- END;
-
- BEGIN
- WriteLn('1 RCL 0 = ',_Rcl(1,0));
- WriteLn('1 RCL 1 = ',_Rcl(1,1));
- WriteLn('1 RCL 2 = ',_Rcl(1,2));
- WriteLn('1 RCL 3 = ',_Rcl(1,3));
- WriteLn('1 RCL 4 = ',_Rcl(1,4));
- WriteLn('2 RCL 0 = ',_Rcl(2,0));
- WriteLn('2 RCL 1 = ',_Rcl(2,1));
- WriteLn('2 RCL 2 = ',_Rcl(2,2));
- WriteLn('2 RCL 3 = ',_Rcl(2,3));
- WriteLn('2 RCL 4 = ',_Rcl(2,4));
- END.
on obtiendra le résultat suivant :
1 RCL 0 = 11 RCL 1 = 2
1 RCL 2 = 4
1 RCL 3 = 8
1 RCL 4 = 16
2 RCL 0 = 2
2 RCL 1 = 4
2 RCL 2 = 8
2 RCL 3 = 16
2 RCL 4 = 32
Voir également
Instruction assembleur 80x86 - Instruction RCR
Instruction assembleur 80x86 - Instruction ROL
Instruction assembleur 80x86 - Instruction ROR
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 827
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413
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 202.
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.