MOVBE

Mover datos después de intercambiar bytes

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F 38 F0 /rMOVBE r16, m16RMValidoValidoOrden byte inversa en m16 y pasar a r16.
0F 38 F0 /rMOVBE r32, m32RMValidoValidoOrden byte inversa en m32 y pasar a r32.
REX.W + 0F 38 F0 /rMOVBE r64, m64RMValidoNo codificableOrden byte inversa en m64 y pasar a r64.
0F 38 F1 /rMOVBE m16, r16MRValidoValidoOrden byte inversa en r16 y pasar a m16.
0F 38 F1 /rMOVBE m32, r32MRValidoValidoOrden byte inversa en r32 y pasar a m32.
REX.W + 0F 38 F1 /rMOVBE m64, r64MRValidoNo codificableOrden byte inversa en r64 y pasar a 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.

RM

  1. modrm.reg 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

MR

  1. modrm.rm 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)

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza una operación de intercambio de bytes en los datos copiados del segundo operando (operando de origen) y almacena el resultado en el primer operando (operando de destino). El operando de origen puede ser un registro de proposito general, o ubicación de memoria; el registro de destino puede ser un registro de proposito general, o una ubicación de memoria; sin embargo, ambos operandos no pueden ser registros, y sólo un operando puede ser una ubicación de memoria. Ambos operandos deben ser del mismo tamaño, que puede ser una palabra, una palabra doble o cuádword.

La instrucción MOVBE se proporciona para intercambiar los bytes en una lectura de la memoria o en un escrito a la memoria; por lo tanto, proporcionar apoyo para la conversión de valores poco-endianos a formato grande y viceversa.

En modo de 64 bits, el tamaño de operación predeterminado de la instrucción es de 32 bits. El uso del prefijo REX.R permite el acceso a registros adicionales (R8-R15). El uso del prefijo 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

TEMP := SRC

IF ( OperandSize = 16)

    THEN
          DEST[7:0] := TEMP[15:8];
          DEST[15:8] := TEMP[7:0];

   ELES IF ( OperandSize = 32)

          DEST[7:0] := TEMP[31:24];
          DEST[15:8] := TEMP[23:16];
          DEST[23:16] := TEMP[15:8];
          DEST[31:23] := TEMP[7:0];

   ELSE IF ( OperandSize = 64)

          DEST[7:0] := TEMP[63:56];
          DEST[15:8] := TEMP[55:48];


          DEST[23:16] := TEMP[47:40];
          DEST[31:24] := TEMP[39:32];
          DEST[39:32] := TEMP[31:24];
          DEST[47:40] := TEMP[23:16];
          DEST[55:48] := TEMP[15:8];
          DEST[63:56] := TEMP[7:0];

FI;

Banderas afectadas

None.

Excepciones

Modo protegido
#GP(0)Si el operando de destino está en 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 CPUID.01H:ECX.MOVBE[22] = 0. Si se utiliza el prefijo LOCK. Si se usa el prefijo REP (F3H).
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 CPUID.01H:ECX.MOVBE[22] = 0. Si se utiliza el prefijo LOCK. Si se usa el prefijo REP (F3H).
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 mientras que el nivel de privilegio actual es 3.
#UDSi CPUID.01H:ECX.MOVBE[22] = 0. Si el prefijo LOCK es usado. Si el prefijo REP (F3H) es usado. Si REPNE (F2H) prefijo se utiliza y CPUID.01H:ECX.SSE4_2[20] = 0.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
#GP(0)Si la dirección de memoria está en forma no canónica.
#SS(0)Si la dirección de la pila 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 CPUID.01H:ECX.MOVBE[22] = 0. Si se utiliza el prefijo LOCK. Si se usa el prefijo REP (F3H).

Fuentes