小编Joa*_*lva的帖子

在从中断处理程序返回之前,是否必须弹出由某些异常推送到堆栈的错误代码?

我已经加载了一个包含256个条目的idt表,它们都指向类似的处理程序:

  • 对于例外8和10-14,推送异常编号(这些异常会自动推送错误代码)
  • 对于其他人,推送"虚拟"错误代码和异常号码;
  • 然后跳转到一个公共处理程序

因此,当公共处理程序进入时,堆栈正确对齐并包含异常/中断号,错误代码(可能只是虚拟代码),eflags,cs和eip.

我的问题是关于从中断处理程序返回.我iret从堆栈中取出异常编号和错误代码后使用返回,但这不适用于异常nr 8; 如果我把错误代码留在堆栈上,那么它返回正常!

问题:

  • 我是否必须将错误代码留在堆栈上,以便将错误代码放在那里?如果是这样,如何iret确定是否必须弹出错误代码?
  • 一旦我启用中断,我总是得到异常8(双故障),但一切都运行正常(我正在开发一个爱好操作系统).这是正常行为还是某处有错误?

x86 assembly operating-system interrupt osdev

6
推荐指数
1
解决办法
4158
查看次数

标签 统计

assembly ×1

interrupt ×1

operating-system ×1

osdev ×1

x86 ×1