Section courante

A propos

Section administrative du site

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 :

  1. RCR BX,6

L'exemple suivant permet de tourner AH vers la droite pendant la retenue du nombre spécifié dans CL :

  1. 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 :

  1. RCR BYTE PTR[BX],10

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

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

on obtiendra le résultat suivant :

16 RCR 0 = 16
16 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.

Dernière mise à jour : Vendredi, le 5 septembre 2014