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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…