Is it possible to make a custom Interrupt in Assembly?

泪湿孤枕 提交于 2019-12-07 00:07:49

问题


In Assembly Language we have the DOS interrupt INT 21h, which is not a hardware interrupt.

I was wondering if it was possible to write my own interrupt and call it.

If possible, please suggest links or methods.


回答1:


Yes, you can create your own interrput handler and call it whenever you want. You will need to set up the interrupt vector (which starts at address 0000:0000) to point to your own interrupt handler.

The pointer to each handler consumes 4 bytes (offset and segment) so if for example you want to setup your interrupt handler for INT 22h you would update the interrput vector at location 0000:0088h to point to your handler.

Check Ralph Brown's interrupt list to check an unused interrupt number (at least one that is not used by a hardware interrput).

Here goes an example of how to set up a handler for interrupt 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


来源:https://stackoverflow.com/questions/12464329/is-it-possible-to-make-a-custom-interrupt-in-assembly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!