【问题标题】:How to handle an interrupt?如何处理中断?
【发布时间】:2011-10-18 07:23:18
【问题描述】:

我的任务是编写一个处理除以零异常的程序。我很难找到有关这方面的信息。据我了解,我需要更改中断向量表中的第 0 个条目,但我该怎么做呢?我看到有一个 LIDT 指令,但是我不需要写整个表吗?

注意,我将在 16 位模式下工作。

【问题讨论】:

  • 除以零是错误,而不是中断。
  • 当 CPU 在保护模式下运行时需要 LIDT(也可以是“16 位”)。您要处理异常的模式是什么?受保护的,真实的还是虚拟的 8086?

标签: assembly interrupt-handling


【解决方案1】:

假设您指的是 16 位模式的“实模式”,则中断向量表只是位于从线性地址 0 开始,请参见 wikipedia 条目。因此,只需从 [0000:0000] 获取旧的 4 字节远指针,以便稍后恢复(或链接)它并使用您自己的处理程序覆盖条目。

如果您使用的是 DOS,您可以使用 INT 21h/AH=25h 设置中断向量并使用 INT 21h/AH=35h 检索旧条目。

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多