Section courante

A propos

Section administrative du site

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 CibleOpé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» :

  1. OR AX,BX

L'exemple suivant permet d'indiquer une opération «DI = DI U 3333h» :

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

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

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

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

  1. OR AX,AX
  2. JE @axvautzero
  3.  ; AX ne vaut pas 0
  4.  ; ...
  5. @axvautzero
  6.  ; AX vaut 0
  7.  ; ...

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.

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