MOVBE
Mover datos después de intercambiar bytes
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F 38 F0 /r | MOVBE r16, m16 | RM | Valido | Valido | Orden byte inversa en m16 y pasar a r16. |
0F 38 F0 /r | MOVBE r32, m32 | RM | Valido | Valido | Orden byte inversa en m32 y pasar a r32. |
REX.W + 0F 38 F0 /r | MOVBE r64, m64 | RM | Valido | No codificable | Orden byte inversa en m64 y pasar a r64. |
0F 38 F1 /r | MOVBE m16, r16 | MR | Valido | Valido | Orden byte inversa en r16 y pasar a m16. |
0F 38 F1 /r | MOVBE m32, r32 | MR | Valido | Valido | Orden byte inversa en r32 y pasar a m32. |
REX.W + 0F 38 F1 /r | MOVBE m64, r64 | MR | Valido | No codificable | Orden 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
modrm.regescriturabyte ModRM, campo reg (bits 5-3)modrm.rmlecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
MR
modrm.rmescriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pidemodrm.reglecturabyte 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. |
#UD | Si CPUID.01H:ECX.MOVBE[22] = 0. Si se utiliza el prefijo LOCK. Si se usa el prefijo REP (F3H). |
Modo real
#GP | Si un operando de memoria dirección efectiva está fuera del límite de segmento CS, DS, ES, FS o GS. |
#SS | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#UD | Si 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. |
#UD | Si 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. |
#UD | Si CPUID.01H:ECX.MOVBE[22] = 0. Si se utiliza el prefijo LOCK. Si se usa el prefijo REP (F3H). |