IF
IF 位只能限制外部设备的中断,对那些影响系统正常运行的中断都无效,如异常 exception,软中断,如 int n 等,不可屏蔽中断 NMI 都不受 IF 限制.
sti 和 cli
IF 可以直接控制。指令cli 使 IF 位为 0,这称为关中断,指令 sti 使 IF 位为 1,这称为开中断。
TF
TF 表示 Trap Flag,也就是陷阱标志位,这用在调试环境中,当TF 为 0 时表示禁止单步执行,也就是说,进入中断后将 TF 置为 0,表示不允许中断处理程序单步执行
NT
NT 位表示 Nest Task Flag,即任务嵌套标志位,也就是用来标记任务嵌套调用的情况。
任务嵌套调用是指
CPU 将当前正执行的旧任务挂起,转去执行另外的新任务,待新任务执行完后,CPU 再回到旧任务继续执行。
(1)将旧任务 TSS 选择子写到了新任务 TSS 中的“上一个任务 TSS 的指针”字段中。
(2)将新任务标志寄存器 eflags 中的 NT 位置 1,表示新任务之所以能够执行,是因为有别的任务调
用了它。
第(2)步中这个“别的任务”便是指 CPU 在第 1 步中写进新任务自己 TSS 的“上一个任务 TSS 的
指针”字段中的值。
这就用到 NT 位了,当 CPU 执行 iret 时,它会去检查 NT 位的值,如果 NT 位为 1,说明当前任务是被嵌套执行的,因此会从自己 TSS 中“上一个任务 TSS 的指针”字段中获取旧任务,然后去执行该任务。如果 NT 位的值为 0,这表示当前是在中断处理环境下,于是就执行正常的中断退出流程