![]() |
1
13
如果CPU自动推送错误代码,则处理程序
必须
把它放在
引用SDM(软件开发人员手册)第3卷第5章第5.13节“错误代码:
你可以找到 IA-32 Software Developer's Manual here : http://www.intel.com/products/processor/manuals/
第3卷第1部分第5章描述了异常和中断处理。第2卷第1部分有
|
![]() |
2
1
我写了一篇 small x86 OS 一会儿回来。看一下文件 isr.asm 在cvs存储库中。 注意我们如何设置处理程序,大多数情况下会将一个虚拟的dword推到堆栈上,以说明自动推送错误代码的少数处理程序。然后,当我们通过IRET返回时,不管中断如何,我们都可以在堆栈上假设2个双字,并在IRET之前执行一个add esp,8,以很好地清理问题。 这应该能回答你的第一个问题。 至于第二个问题:当您启用中断时出现双故障,…hmmm可能是分页问题,如果您没有正确设置它。可能是另外一件事:) |
![]() |
3
1
一旦启用了中断,我就遇到了类似的“双重错误”问题。嗯,他们 看 就像双重错误,但它们确实是计时器中断!
双故障是中断号
不幸的是,默认的pic配置将计时器作为中断号中断。
屏蔽掉所有的pic中断(直到我准备好正确配置pic)使这些类似于双故障的计时器中断静音。 (pics要求CPU在产生下一个中断之前确认中断。因为您的代码没有确认初始计时器中断,所以图片再也没有给您任何信息!这就是为什么你只能得到一个,而不是一个人所期望的那么多。) |
![]() |
4
0
正如其他人提到的,您必须执行以下任一操作:
或者如果要忽略错误代码:
如果你不这样做,
Minimal Working this page handler
我是为了说明这一点而创造的。尝试评论
将上面的内容与 Division error exception 不会弹出堆栈。
注意,如果你只是
Intel Manual Volume 3 System Programming Guide - 325384-056US September 2015 表6-1。“保护模式异常和中断”列“错误代码”包含推送或不推送错误代码的中断列表。 38.9.2.2“页面错误代码”解释了错误的含义。
处理这一问题的一个好方法是推送一个伪错误代码
Linux内核4.2似乎做了类似的事情。下
arch/x86/entry/entry64.S
它模拟中断
然后在同一个文件中使用它:
什么时候推
|
|
Anon. · 用汇编语言解释这一行? 6 年前 |
![]() |
wangt13 · 如何使用VMX暂停和恢复VM 6 年前 |
![]() |
Kay · Skylake和更新的环形巴士 6 年前 |
![]() |
Kadir · Intel芯片上的半精度浮点算法 6 年前 |
![]() |
Some_Dude · x86汇编牛顿平方根算法寄存器为1#IND 6 年前 |