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
也将禁止下一条指令的外部中断。