【问题标题】:Is it possible to make a custom Interrupt in Assembly?是否可以在装配中进行自定义中断?
【发布时间】:2012-09-17 17:29:53
【问题描述】:

在汇编语言中,我们有 DOS 中断 INT 21h,它不是硬件中断。

我想知道是否可以编写自己的中断并调用它。

如果可能,请提供链接或方法。

【问题讨论】:

标签: assembly x86 interrupt


【解决方案1】:

是的,您可以创建自己的中断处理程序并随时调用它。 您需要设置中断向量(从地址 0000:0000 开始)指向您自己的中断处理程序。

指向每个处理程序的指针占用 4 个字节(偏移量和段),因此,例如,如果您想为 INT 22h 设置中断处理程序,您可以更新位置 0000:0088h 处的中断向量以指向您的处理程序。

检查Ralph Brown's interrupt list 以检查未使用的中断号(至少一个未被硬件中断使用的中断号)。

这里有一个如何为中断 22h 设置处理程序的示例:

INITIALIZE: 
      XOR AX,AX
      MOV ES,AX
      CLI ; Disable interrupts, might not be needed if seting up a software-only interrupt
      MOV WORD PTR ES:[136], OFFSET INT22  ; setups offset of handler 22h
      MOV WORD PTR ES:[138], CS            ; Here I'm assuming segment of handler is current CS
      STI ; Reenable interrupts
      ; End of setup


INT22  PROC FAR
       ; Here goes the body of your handler
       IRET
INT22  ENDP

【讨论】:

  • 我明白了,但是像 INT 21H 中的文件写入功能之类的东西,可以编程。此外,你能举一个设置中断的例子吗?先生会很有帮助的。
  • @TotalAnimeImmersion:是的,你可以在中断处理程序中做任何你想做的事情。添加了设置处理程序的示例。
  • 非常感谢先生。真的很有帮助。
  • 如果您不使用 DOS 并且想知道应该使用哪些向量,8086 intel manual(第 2 页第 25 节)建议将向量 32-255(内存中的 0x80-0x3ff)作为较低的向量由英特尔“保留”,这当然是一个建议,因为它不能在实模式下强制执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2019-06-10
相关资源
最近更新 更多