lmsw - 加载机器状态字
将源操作数加载到机器状态字,即寄存器 CR0 的位 0 到 15。源操作数可以是 16 位通用寄存器或内存位置。只有源操作数的低 4 位(也就是 PE、MP、EM 及 TS 标志)会加载到 CR0。CR0 的 PG、CD、NW、AM、WP、NE 及 ET 标志不受影响。操作数大小属性不影响此指令。
如果源操作数的 PE 标志(位 0)设置为 1,则指令导致处理器切换到保护模式。处于保护模式时,不能使用 LMSW 指令清除 PE 标志,并强制切换回实地址模式。
提供的 LMSW 指令用于操作系统软件;不应该在应用程序中使用它。在保护或虚 8086 模式中,此指令只能在 CPL 0 级别执行。
提 供此指令是为了同 Intel(R) 286 处理器保持兼容;对于要在奔腾(R) 4、P6 系列、奔腾、Intel486 及 Intel386 处理器上运行的程序与过程,应该使用 MOV(控制寄存器)指令加载整个 CR0 寄存器。MOV CR0 指令可用于设置或清除 CR0 中的 PE 标志,从而让过程或程序在保护与实地址模式之间转换。
此指令是序列化指令。
操作
CR0[0:3] SRC[0:3];
影响的标志无。
保护模式异常
#GP(0) - 如果当前特权级别不是 0。如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 寄存器用于访问内存,并且它包含空的段选择器。
#SS(0) - 如果内存操作数有效地址超出 SS 段限制。
#PF(错误代码) - 如果发生页错误。
实地址模式异常
#GP - 如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。
虚 8086 模式异常
#GP(0) - 如果当前特权级别不是 0。如果内存操作数有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果内存操作数有效地址超出 SS 段限制。
#PF(错误代码) - 如果发生页错误。