Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to make a custom Interrupt in Assembly?

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.

like image 643
Total Anime Immersion Avatar asked Sep 17 '12 17:09

Total Anime Immersion


1 Answers

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
like image 179
gusbro Avatar answered Sep 29 '22 22:09

gusbro