是否有任何汇编指令让我们直接读取汇编处理器Flags寄存器中的中断标志?
是否可以读取C / C ++中的中断标志?
答案 0 :(得分:1)
根据Wikipedia,您根据您所使用的架构使用PUSHF,PUSHFD或PUSHFQ指令。
除非您正在编写内核模块,否则我不明白这一点。在用户模式下永远不会清楚。
答案 1 :(得分:1)
您需要一些内联汇编。例如,Linux在'irqflags.h'中执行此操作。此功能适用于32位和64位IA。
static inline unsigned long native_save_fl(void)
{
unsigned long flags;
/*
* "=rm" is safe here, because "pop" adjusts the stack before
* it evaluates its effective address -- this is part of the
* documented behavior of the "pop" instruction.
*/
asm volatile("# __raw_save_flags\n\t"
"pushf ; pop %0"
: "=rm" (flags)
: /* no input */
: "memory");
return flags;
}
返回所有处理器EFLAGS位,包括第9位的中断使能(EFLAGS.IF)。如果您只想检查IF,则将返回值屏蔽为0x200。
答案 2 :(得分:0)
我假设您正在编写自己的操作系统或某种类型的嵌入式程序。您应该设置或增加内存中的某个位置,或者将消息回送到某种类型的消息队列,以便中断例程可以触发线程或允许某个主级例程检查,而不是读取处理器中断标志。如果中断例程处理了一个中断。