Assembleur 80x86 | OR |
---|---|
INTEL 8088+ | Or bitwise |
Syntaxe
OR Opérande Cible, Opérande Source |
Description
L'instruction OR effectue un OU BINAIRE sur les 2 opérandes spécifiés, le calcul est placé dans la première opérande, c'est-à-dire l'Opérande Cible. Rappelons qu'un OU BINAIRE donne le résultat 1 si au moins une des 2 opérandes vaut 1 et donne 0 si les deux bits valent 0.
Algorithme
MODULE OR(Opérande Cible, Opérande Source) Opérande Cible ← Opérande Cible U Opérande Source drapeau CF ← 0 drapeau OF ← 0 |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
OR AL, imm8 | 0Ch ib | Effectue un «Ou binaire» du contenu du registre AL avec une valeur immédiate de 8 bits. |
OR AX, imm16 | 0Dh iw | Effectue un «Ou binaire» du contenu du registre AX avec une valeur immédiate de 16 bits. |
OR EAX, imm32 | 0Dh id | Effectue un «Ou binaire» du contenu du registre EAX avec une valeur immédiate de 32 bits. |
OR RAX, imm32 | 0Dh id | Effectue un «Ou binaire» du contenu du registre RAX avec une valeur immédiate de 32 bits. |
OR reg/mem8, imm8 | 80h /1 ib | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 8 bits avec une valeur immédiate de 8 bits. |
OR reg/mem16, imm16 | 81h /1 iw | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 16 bits avec une valeur immédiate de 16 bits. |
OR reg/mem32, imm32 | 81h /1 id | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 32 bits avec une valeur immédiate de 32 bits. |
OR reg/mem64, imm32 | 81h /1 id | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 64 bits avec une valeur immédiate entière de 32 bits. |
OR reg/mem16, imm8 | 83h /1 ib | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 16 bits avec une valeur immédiate entière de 8 bits. |
OR reg/mem32, imm8 | 83h /1 ib | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 32 bits avec une valeur immédiate entière de 8 bits. |
OR reg/mem64, imm8 | 83h /1 ib | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 64 bits avec une valeur immédiate entière de 8 bits. |
OR reg/mem8, reg8 | 08h /r | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 8 bits avec le contenu d'un registre de 8 bits. |
OR reg/mem16, reg16 | 09h /r | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 16 bits avec le contenu d'un registre de 16 bits. |
OR reg/mem32, reg32 | 09h /r | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 32 bits avec le contenu d'un registre de 32 bits. |
OR reg/mem64, reg64 | 09h /r | Effectue un «Ou binaire» du contenu d'une opérande mémoire ou registre 64 bits avec le contenu d'un registre de 64 bits. |
OR reg8, reg/mem8 | 0Ah /r | Effectue un «Ou binaire» du contenu d'un registre de 8 bits avec le contenu d'une opérande mémoire ou registre 8 bits. |
OR reg16, reg/mem16 | 0Bh /r | Effectue un «Ou binaire» du contenu d'un registre de 16 bits avec le contenu d'une opérande mémoire ou registre 16 bits. |
OR reg32, reg/mem32 | 0Bh /r | Effectue un «Ou binaire» du contenu d'un registre de 32 bits avec le contenu d'une opérande mémoire ou registre 32 bits. |
OR reg64, reg/mem64 | 0Bh /r | Effectue un «Ou binaire» du contenu d'un registre de 64 bits avec le contenu d'une opérande mémoire ou registre 64 bits. |
Cycles d'horloge
Opérande | Cycle d'horloge | Taille en octets | |||
---|---|---|---|---|---|
8086 | 80286 | 80386 | 80486 | ||
reg,reg | 3 | 2 | 2 | 1 | 2 |
mem,reg | 16+EA | 7 | 7 | 3 | 2 à 4 |
reg,mem | 9+EA | 7 | 6 | 1 | 2 à 4 |
mem,immed8 | 17+EA | 7 | 7 | 3 | 3 à 6 |
mem,immed16 | 25+EA | 7 | 7 | 3 | 3 à 6 |
reg,immed | 4 | 3 | 2 | 1 | 3 à 4 |
accum,immed | 4 | 3 | 2 | 1 | 2 à 3 |
Exceptions
Message | Mode réel | Virtuel 8086 | Mode protégé | Description |
---|---|---|---|---|
#SS(Pile) | 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'indiquer une opération «AX = AX U BX» :
- OR AX,BX
L'exemple suivant permet d'indiquer une opération «DI = DI U 3333h» :
- OR DI,3333h
Le contenu des mots de l'emplacement mémoire spécifié par le registre DI est «Ou binaire» avec le registre AX :
- OR AX,[DI]
Le contenu en octets de l'emplacement mémoire spécifié par TABLEAU plus SI est un «Ou binaire» avec le registre AL :
- OR TABLEAU[SI],AL
Le registre CL est un «Ou binaire» avec le contenu en octets de l'emplacement mémoire spécifié par le registre EAX :
- OR [EAX],CL
Cet exemple permet de vérifier si AX vaut 0. Cette technique de programmation à l'apparence un peu étrange, est pourtant très commune chez les professionnels de l'assembleur, car il consomme moins d'octets en mémoire, que l'utilisation de l'instruction «CMP AX,0» :
Voir également
Instruction assembleur 80x86 - Instruction AND
Instruction assembleur 80x86 - Instruction NEG
Instruction assembleur 80x86 - Instruction NOT
Instruction assembleur 80x86 - Instruction XOR
Mathématique - Algèbre de Boole - Table de vérité
Références
Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 823
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 412
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 179.
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 16 à 19.