Assembleur 80x86 | RCR |
---|---|
INTEL 8088+ | Rotate Through Carry Right |
Syntaxe
RCR opérandecible,1 | 8088+ |
RCR opérandecible,CL | 8088+ |
RCR 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 droite» |
nombredebits | Ce paramètre permet d'indiquer la rotation de bit vers la droite à 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 droite en réinsérant le bit dans l'indicateur de retenue (CF) ainsi que dans le bit le plus à gauche libéré.
Algorithme
temp ← max (nombredebits, 31) SI temp = 1 ALORS OF ← highbit ( opérandecible ) ≠ highbit ( opérandecible ) décalage à droite ) ) SINON OF ← ? FIN SI Valeur ← concaténation ( opérandecible, CF ) FAIRE TANT QUE temp ≠ 0 X ← valeur ∩ 1 valeur ← valeur décalage à droite de 1 highbit ( valeur ) ← x temp ← temp - 1 FIN DE FAIRE CF ← highbit ( valeur ) opérandecible ← valeur |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
RCR reg/mem8, 1 | D0h /3 | 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 droite. |
RCR reg/mem8,CL | D2h /3 | 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 droite. |
RCR reg/mem8,imm8 | C0h /3 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 droite. |
RCR reg/mem16,1 | D1h /3 | 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 droite. |
RCR reg/mem16,CL | D3h /3 | 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 droite. |
RCR reg/mem16, imm8 | C1h /3 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 droite. |
RCR reg/mem32,1 | D1h /3 | 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 droite. |
RCR reg/mem32,CL | D3h /3 | 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 droite. |
RCR reg/mem32, imm8 | C1h /3 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 droite. |
RCR reg/mem64,1 | D1h /3 | 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 droite. |
RCR reg/mem64,CL | D3h /3 | 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 droite. |
RCR reg/mem64, imm8 | C1h /3 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 droite. |
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 droite de 6 places avec le drapeau de retenue :
- RCR BX,6
L'exemple suivant permet de tourner AH vers la droite pendant la retenue du nombre spécifié dans CL :
- RCR 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 droite par le biais de 10 positions :
- RCR BYTE PTR[BX],10
Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :
- Program RcrSamples;
-
- Function _Rcr(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
- MOV AX,Value
- MOV CL,_Shift
- RCR AX,CL
- END;
-
- BEGIN
- WriteLn('16 RCR 0 = ',_Rcr(16,0));
- WriteLn('16 RCR 1 = ',_Rcr(16,1));
- WriteLn('16 RCR 2 = ',_Rcr(16,2));
- WriteLn('16 RCR 3 = ',_Rcr(16,3));
- WriteLn('16 RCR 4 = ',_Rcr(16,4));
- WriteLn('16 RCR 0 = ',_Rcr(32,0));
- WriteLn('32 RCR 1 = ',_Rcr(32,1));
- WriteLn('32 RCR 2 = ',_Rcr(32,2));
- WriteLn('32 RCR 3 = ',_Rcr(32,3));
- WriteLn('32 RCR 4 = ',_Rcr(32,4));
- WriteLn('32 RCR 4 = ',_Rcr(32,4));
- END.
on obtiendra le résultat suivant :
16 RCR 0 = 1616 RCR 1 = 8
16 RCR 2 = 4
16 RCR 3 = 2
16 RCR 4 = 1
16 RCR 0 = 32
32 RCR 1 = 16
32 RCR 2 = 8
32 RCR 3 = 4
32 RCR 4 = 2
32 RCR 4 = 2
Voir également
Instruction assembleur 80x86 - Instruction RCL
Instruction assembleur 80x86 - Instruction ROR
Instruction assembleur 80x86 - Instruction ROL
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 828
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 204.
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.