STI - 設定中斷標誌

操作碼

指令

說明

FB

STI

設定中斷標誌;下一個指令結束時啟用可遮蔽的外部中斷

說明

設定 EFLAGS 暫存器中的中斷標誌 (IF)。設定 IF 標誌設定之後,處理器在執行下一個指令之後,開始響應可遮蔽的外部中斷。此指令提供延遲效果目的在於,使得可以在從過程(或子例程)返回之前啟用中斷。例如,如果 STI 指令後跟 RET 指令,則可以在識別外部中斷之前執行 RET 指令。此行為可用於在過程開始時禁用外部中斷,在過程結束時再次啟用外部中斷。如果 STI 指令後跟 CLI 指令(清除 IF 標誌),則 STI 指令的效果相反。

IF 標誌、STI 以及 CLI 指令不影響異常與 NMI 中斷的產生。

以下決策表指示根據處理器的操作模式,以及目前執行的程式或過程的 CPL 與 IOPL(表格底部),STI 指令執行的操作(表格頂部)。

PE =

0

1

1

1

VM =

X

0

0

1

CPL

X

IOPL

> IOPL

=3

IOPL

X

X

X

=3

IF 1

Y

Y

N

Y

#GP(0)

N

N

Y

N

備註:X 表示無意義。N 表示不執行第 1 列的操作。Y 表示執行第 1 列的操作。

操作

IF PE=0 (* Executing in real-address mode *)
THEN
IF 1; (* Set Interrupt Flag *)
ELSE (* Executing in protected mode or virtual-8086 mode *)
IF VM=0 (* Executing in protected mode*)
THEN
IF IOPL 3
THEN
IF 1;
ELSE
IF CPL IOPL
THEN
IF 1;
ELSE
#GP(0);
FI;
FI;
ELSE (* Executing in Virtual-8086 mode *)
#GP(0); (* Trap to virtual-8086 monitor *)
FI;
FI;

影響的標誌

IF 標誌設定為 1。

保護模式異常

#GP(0) - 如果 CPL 大於(特權更小)目前程式或過程的 IOPL。

實地址模式異常

無。

虛 8086 模式異常

#GP(0) - 如果 CPL 大於(特權更小)目前程式或過程的 IOPL。