为什么我的 cpu 似乎失去了解码能力

Why my cpu seems to lose the ability to decode

我在完成 OS 课程的实验时遇到了这个问题。我们正在尝试实现一个具有系统调用功能的内核(平台:QEMU/i386)。 测试内核时,出现问题,内核将用户程序加载到内存后,将CPU状态从内核模式更改为用户模式使用'iret'指令,CPU以如下奇怪的方式工作。

您的访客可能最终执行了一个清零的内存块。在 i386 中,归零内存反汇编为一系列“add BYTE PTR [rax],al”指令,每个指令都是两个字节长 (0x00 0x00),如果 rax 恰好指向读取为零的内存,这将有效是一个 2 字节的 insn 空操作,对应于您所看到的。这可能是因为您错误地设置了 iret 而它没有返回到您期望的地址,或者因为您的 MMU 设置错误并且用户空间程序不在您期望的内存中,因为实例.

您可以使用 QEMU 的调试选项来证实这一理论(例如 -d in_asm,cpu,exec,int,unimp,guest_errors -D qemu.log 会将大量执行信息记录到文件中),这应该(在许多其他数据中)向您显示它实际上是什么指令正在执行。