|
(1)在描述符表的范围内;
(2)是存储段描述符或系统段描述符或任务门描述符或调用门描述符;
(3)CPL和OPRD2的RPL都不大于DPL。
在满足条件的情况下,装入到OPRD1的由OPRD2所指示的描述符中的属性字段是指描述符的高4字节和00FXFF00H相与的结果,其中X表示第16位到第19位无定义。注意,如果指令使用16位操作数,那么只有高4字节中的低字被装入到OPRD1,即装入到OPRD1的 属性字段不包括G位和AVL位等。该指令只影响ZF标志。
5.装载段界限指令
装载界限指令的格式如下: LSL OPRD1,OPRD2
其中,操作数OPRD1可以是16位或32位通用寄存器,操作数OPRD2是16位通用寄存器或存储单元,也可以是32位通用寄存器或存储单元。操作数OPRD1和OPRD2的尺寸必须一致。该指令把操作数OPRD2视为选择子(当为32位时,仅使用低16位),如果OPRD2所指示的描述符满足如下条件,那么零标志ZF被置1,并把描述符内的界限字段装入OPRD1;否则,ZF清0,OPRD1保持不变。
(1)在描述符表的范围内;
(2)是存储段描述符或系统段描述符,而非门描述符;
(3)CPL和OPRD2的RPL都不大于DPL。
在满足条件的情况下,装入到OPRD1的由OPRD2所指示的描述符中的界限字段以字节位为单位。如果描述符中的界限字段以4K字节为单位(G=1),那么装入到OPRD1时被左移12位,空出的低位全部填成1。注意,如果指令使用16位操作数,那么只有段界限的低16位被装入到OPRD1。该指令只影响ZF标志。
6.读写检验指令
利用读检验指令和写检验指令可分别检查在当前特权级上指定的段能否读或写,从而避免引起不必要的异常。
(1)读检验指令
读检验指令的一般格式如下: VERR OPRD
其中,操作数OPRD可以是16位通用寄存器或存储单元,也可以是32位通用寄存器或存储单元。该指令的功能是把OPRD的内容作为一个选择子(当32位时仅使用低16位),判断在当前特权级上该选择子所指示的段是否可读。如果该选择子指示合法的一个存储段描述符,并且在当前特权级上可读所描述的段,那么零标志ZF被置为1,否则ZF被清0。该指令只影响ZF标志。
(2)写检验指令
写读检验指令的一般格式如下: VERW OPRD
其中,操作数OPRD可以是16位通用寄存器或存储单元,也可以是32位通用寄存器或存储单元。该指令的功能是把OPRD的内容作为一个选择子(当32位时仅使用低16位),判断在当前特权级上该选择子所指示的段是否可写。如果该选择子指示合法的一个存储段描述符,并且在当前特权级上可写所描述的段,那么零标志ZF被置为1,否则ZF被清0。该指令只影响ZF标志。
|