我在QEMU下运行我的保护模式内核,并且在尝试执行汇编程序HLT指令时导致一般性保护错误。 CPL为0,EFLAGS中IOPL为0,启用中断。
这可能是QEMU问题还是我错过了什么?
模拟SMP(对称多处理器)时会发生这种情况。
答案 0 :(得分:1)
检查代码段选择器的DPL。
答案 1 :(得分:0)
它可能没有帮助,但我们一直使用asm(“hlt”)和qemu非smp并且它工作正常。
然而,调用它可能会导致中断有机会运行。所以你确定EIP是asm hlt吗?如果是这样,你应该objdump .o以确保编译器生成你认为它做的。
HTH