SMSW
Palabra de estado de la máquina
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
0F 01 /4 | SMSW r/m16 | M | Valido | Valido | Almacene la palabra estado de la máquina a r/m16. |
0F 01 /4 | SMSW r32/m16 | M | Valido | Valido | Almacene la palabra estado de la máquina en 16 bits de bajo orden de r32/m16; 16 bits de alto orden de r32 quedan indefinidas. |
REX.W + 0F 01 /4 | SMSW r64/m16 | M | Valido | Valido | Almacene la palabra estado de la máquina en 16 bits de bajo orden de r64/m16; 16 bits de alto orden de r32 quedan indefinidas. |
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.
M
modrm.rmescriturabyte 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...
Descripción
Almacena la palabra estado de la máquina (bits 0 a 15 de registro de control CR0) al operando de destino. El operando de destino puede ser un registro de proposito general o una ubicación de memoria.
En modos no-64-bit, cuando el operando de destino es un registro de 32 bits, los 16 bits de bajo orden del registro CR0 se copian en los 16 bits de bajo orden del registro y los 16 bits de alto orden quedan indefinidas. Cuando el operando de destino es una ubicación de memoria, los 16 bits de bajo orden de registro CR0 están escritos a la memoria como una cantidad de 16 bits, independientemente del tamaño de operando.
En el modo 64-bit, el comportamiento de la instrucción SMSW se define por los siguientes ejemplos:
- SMSW r16 tamaño de operando 16, almacenar CR0[15:0] en r16 SMSW r32 tamaño de operando 32, CR0 de cero, y almacenar en r32 SMSW r64 tamaño de operando 64, CR0 de cero, y almacenar en r64 SMSW m16 tamaño de operando 16, almacenar CR0[15:0] en m16 SMSW m16 tamaño de operando 32, store CR0[15:0] in m16 (not m32) * SMSW m16 operandos tamaño 64, almacenar CR0[15:0] en m16 (no m64)
SMSW es sólo útil en el software del sistema operativo. Sin embargo, no es una instrucción privilegiada y se puede utilizar en programas de aplicación si CR4.UMIP = 0. Se proporciona para la compatibilidad con el procesador Intel 286. Los programas y procedimientos destinados a ejecutar en procesadores IA-32 e Intel 64 comenzando con los procesadores Intel386 deben utilizar la instrucción MOV CR para cargar la palabra estado de la máquina. Ver "Cambios para el comportamiento de la instrucción en VMX Operación no-rota" en el capítulo 27 de Intel(R) 64 e IA-32 Architectures Software Developer's Manual, Volumen 3C, para obtener más información sobre el comportamiento de esta instrucción en VMX operación no-raíz.
Operación
DEST := CR0[15:0];
(* Machine status word *)Banderas afectadas
None.
Excepciones
Modo protegido
#GP(0) | Si el destino se encuentra 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 se utiliza para acceder a la memoria y contiene un NULL selector de segmento. Si CR4.UMIP = 1 y CPL > 0. |
#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á activada y se hace una referencia de memoria no alineada mientras CPL = 3. |
#UD | Si se utiliza el prefijo LOCK. |
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(0) | Si un operando de memoria dirección efectiva está fuera del límite del segmento SS. |
#UD | Si se utiliza el prefijo LOCK. |
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. Si CR4.UMIP = 1. |
#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. |
#UD | Si se utiliza el prefijo LOCK. |
Modo de compatibilidad
| Las mismas excepciones que en 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. Si CR4.UMIP = 1 y CPL > 0. #PF(fault-code) Si ocurre un fallo de pagina. |
#AC(0) | Si la comprobación de alineación está activada y se hace una referencia de memoria no alineada mientras CPL = 3. |
#UD | Si se utiliza el prefijo LOCK. |