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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With