X86 如何禁用一条指令的中断?

X86 如何禁用一条指令的中断?,x86,assembly,interrupt,X86,Assembly,Interrupt,除了使用CLI指令之外,是否还有其他方法可以在中仅禁用一条指令期间的中断?是的,使用MOV加载SS将禁止下一条指令的外部中断。这是指令集参考说明的内容: 用MOV指令加载SS寄存器会抑制所有中断 直到执行下一条指令之后。这次手术 允许使用将堆栈指针加载到ESP寄存器中 中断前的下一条指令(MOV ESP、堆栈指针值) 发生 此代码段实现了以下功能: pushf pop ax and ax, FDFFh push ax popf ;This disables int

除了使用
CLI
指令之外,是否还有其他方法可以在中仅禁用一条指令期间的中断?

是的,使用
MOV
加载
SS
将禁止下一条指令的外部中断。这是指令集参考说明的内容:

用MOV指令加载SS寄存器会抑制所有中断 直到执行下一条指令之后。这次手术 允许使用将堆栈指针加载到ESP寄存器中 中断前的下一条指令(MOV ESP、堆栈指针值) 发生


此代码段实现了以下功能:

pushf
pop  ax
and  ax, FDFFh
push ax
popf               ;This disables interrupts, You didn't use "CLI"
; Here IF is clear
sti

你为什么会需要它呢?还要注意
CLI
不会影响软件中断。我在分配任务时需要它,所以这里还有一个问题:你为什么要使用CLI的替代品,SEI?例如@IraBaxter,如果您处于保护模式,并且由于您不是内核而无法禁用中断。if标志控制硬件中断。在Linux上通过
int0x80
发出系统调用仍然是可能的。@您是正确的。OP的问题都是关于硬件中断的。OP忘记从标题中删除“软件”一词。请参阅编辑历史。使用
POP
加载
SS
也将禁止下一条指令的外部中断。