Assembleur 80x86 | ROR |
---|---|
INTEL 8088+ | Rotate Right |
Syntaxe
ROR opérandecible,1 | 8088+ |
ROR opérandecible,CL | 8088+ |
ROR 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 le bit le plus à gauche libéré.
Algorithme
temp ← max ( compteur, 31 ) SI temp = 1 ALORS OF ← highbit ( destination ) <> highbit ( destination décalage à droite ) SINON OF ← ? FIN SI BOUCLE FAIRE TANT QUE temp ≠ 0 x ← valeur ∩ 1 valeur ← valeur décalage à droite de 1 highbit ( valeur ) ← x temp ← temp - 1 BOUCLE FIN DE TANT QUE CF ← highbit ( valeur ) destination ← valeur |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
ROR reg/mem8, 1 | D0h /1 | Cette instruction effectue une rotation de 8 bits d'un opérande registre ou mémoire 8 bits d'un seul bit vers la droite. |
ROR reg/mem8, CL | D2h /1 | 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 droite. |
ROR reg/mem8, imm8 | C0h /1 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 droite. |
ROR reg/mem16, 1 | D1h /1 | Cette instruction effectue une rotation de 16 bits d'un opérande registre ou mémoire 16 bits d'un seul bit vers la droite. |
ROR reg/mem16, CL | D3h /1 | 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 droite. |
ROR reg/mem16, imm8 | C1h /1 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 droite. |
ROR reg/mem32, 1 | D1h /1 | Cette instruction effectue une rotation de 32 bits d'un opérande registre ou mémoire 32 bits d'un seul bit vers la droite. |
ROR reg/mem32, CL | D3h /1 | 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 droite. |
ROR reg/mem32, imm8 | C1h /1 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 droite. |
ROR reg/mem64, 1 | D1h /1 | Cette instruction effectue une rotation de 64 bits d'un opérande registre ou mémoire 64 bits d'un seul bit vers la droite. |
ROR reg/mem64, CL | D3h /1 | 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 droite. |
ROR reg/mem64, imm8 | C1h /1 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 droite. |
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 droite de 10 places :
- ROR 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 droite :
- ROR BYTE PTR[BX],2
Voici un exemple en Turbo Pascal montrant l'utilisation de cette instruction :
- Program RorSamples;
-
- Function _Ror(Value:Integer;_Shift:Byte):Integer;Assembler;ASM
- MOV AX,Value
- MOV CL,_Shift
- ROR AX,CL
- END;
-
- BEGIN
- WriteLn('16 ROR 0 = ',_Ror(16,0));
- WriteLn('16 ROR 1 = ',_Ror(16,1));
- WriteLn('16 ROR 2 = ',_Ror(16,2));
- WriteLn('16 ROR 3 = ',_Ror(16,3));
- WriteLn('16 ROR 4 = ',_Ror(16,4));
- WriteLn('16 ROR 0 = ',_Ror(32,0));
- WriteLn('32 ROR 1 = ',_Ror(32,1));
- WriteLn('32 ROR 2 = ',_Ror(32,2));
- WriteLn('32 ROR 3 = ',_Ror(32,3));
- WriteLn('32 ROR 4 = ',_Ror(32,4));
- WriteLn('32 ROR 4 = ',_Ror(32,4));
- END.
on obtiendra le résultat suivant :
16 ROR 0 = 1616 ROR 1 = 8
16 ROR 2 = 4
16 ROR 3 = 2
16 ROR 4 = 1
16 ROR 0 = 32
32 ROR 1 = 16
32 ROR 2 = 8
32 ROR 3 = 4
32 ROR 4 = 2
32 ROR 4 = 2
Voir également
Instruction assembleur 80x86 - Instruction RCL
Instruction assembleur 80x86 - Instruction RCR
Instruction assembleur 80x86 - Instruction ROL
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 213.
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.