SMSW

Palabra de estado de la máquina

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
0F 01 /4SMSW r/m16MValidoValidoAlmacene la palabra estado de la máquina a r/m16.
0F 01 /4SMSW r32/m16MValidoValidoAlmacene 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 /4SMSW r64/m16MValidoValidoAlmacene 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

  1. modrm.rm escriturabyte 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 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.
#UDSi se utiliza el prefijo LOCK.
Modo real
#GPSi 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.
#UDSi 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.
#UDSi 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.
#UDSi se utiliza el prefijo LOCK.

Fuentes