OR

Inclusive logística O

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0C ibOR AL, imm8IValidoValidoAL O imm8.
0D iwOR AX, imm16IValidoValidoAX OR imm16.
0D idOR EAX, imm32IValidoValidoEAX O imm32.
REX.W + 0D idOR RAX, imm32IValidoNo codificableRAX OR imm32 (extended firma).
80 /1 ibOR r/m8, imm8MIValidoValidor/m8 O imm8.
81 /1 iwOR r/m16, imm16MIValidoValidor/m16 O imm16.
81 /1 idOR r/m32, imm32MIValidoValidor/m32 O imm32.
REX.W + 81 /1 idOR r/m64, imm32MIValidoNo codificabler/m64 OR imm32 (extended firma).
83 /1 ibOR r/m16, imm8MIValidoValidor/m16 OR imm8 (extended firma).
83 /1 ibOR r/m32, imm8MIValidoValidor/m32 OR imm8 (extended firma).
REX.W + 83 /1 ibOR r/m64, imm8MIValidoNo codificabler/m64 OR imm8 (extended firma).
08 /rOR r/m8, r8MRValidoValidor/m8 O r8.
09 /rOR r/m16, r16MRValidoValidor/m16 O r16.
09 /rOR r/m32, r32MRValidoValidor/m32 O r32.
REX.W + 09 /rOR r/m64, r64MRValidoNo codificabler/m64 O r64.
0A /rOR r8, r/m8RMValidoValidor8 O r/m8.
0B /rOR r16, r/m16RMValidoValidor16 O r/m16.
0B /rOR r32, r/m32RMValidoValidor32 O r/m32.
REX.W + 0B /rOR r64, r/m64RMValidoNo codificabler64 O r/m64.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

I

  1. AL/AX/EAX/RAX
  2. imm8/16/32inmediato que sigue a la instruccion, del ancho del operando

MI

  1. modrm.rm lectura y escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. imm8/16/32inmediato que sigue a la instruccion, del ancho del operando

MR

  1. modrm.rm lectura y escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lecturabyte ModRM, campo reg (bits 5-3)

RM

  1. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide

Coste medido

Cargando las mediciones de arch-data...

Banderas nombradas

Descripción

Realiza una operación OR un poco inclusiva entre el destino (primero) y la fuente (segundo) operandos y almacena el resultado en la ubicación del operando de destino. El operando de origen puede ser un registro inmediato, un registro, o una ubicación de memoria; el operando de destino puede ser un registro o una ubicación de memoria. (Sin embargo, dos operandos de memoria no se pueden utilizar en una instrucción.) Cada parte del resultado de la instrucción OR se establece a 0 si ambos bits correspondientes de la primera y segunda operandos son 0; de lo contrario, cada bit se establece a 1.

Esta instrucción se puede utilizar con un prefijo LOCK para permitir que la instrucción se ejecute atómicamente.

En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 32 bits. El uso de un prefijo REX en forma de REX.R permite el acceso a registros adicionales (R8-R15). Utilizar un prefijo REX en forma de REX.W promueve la operación a 64 bits. Vea la tabla resumen al comienzo de esta sección para la codificación de datos y límites.

Operación

DEST := DEST OR SRC;

Banderas afectadas

Las banderas OF y CF se limpian; las banderas SF, ZF y PF se establecen según el resultado. El estado de la bandera AF es indefinido.

Excepciones

Modo protegido
#GP(0)Si el operando de destino apunta a un segmento no escrito. Si la dirección efectiva un operando de memoria está fuera del límite de segmento CS, DS, ES, FS o GS. Si el registro DS, ES, FS o GS contiene un NULL selector de segmento.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
Modo real
#GPSi un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SSSi un operando de memoria dirección efectiva está fuera del límite del segmento SS.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
Modo virtual-8086
#GP(0)Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS.
#SS(0)Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. #PF(fault-code) Si un fallo de pagina ocurre.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.
Modo de compatibilidad
Lo mismo que las excepciones modo protegido.
Modo de 64 bits
#SS(0)Si una dirección de memoria que hace referencia al segmento SS está en forma no canónica.
#GP(0)Si la dirección de memoria está en forma no canónica. #PF(fault-code) Si un fallo de pagina ocurre.
#AC(0)Si la comprobación de alineación está habilitada y se hace una referencia de memoria no alineada mientras que el nivel de privilegio actual es 3.
#UDSi el prefijo LOCK se utiliza pero el destino no es un operando de memoria.

Fuentes