__asm
{
// disable Ints
PUSHFD
CLI
// get vector pointer
SUB ESP, 4
SIDT [ESP - 2]
POP ESI // ESI -> IDT base
SUB EDX, EDX
MOV EAX, 8
MUL iInt
ADD ESI, EAX // ESI -> target Int vector
// save current handler
MOV EDI, [EDI + 4]
MOV DI, WORD PTR [ESI] // EDI -> old Int handler
MOV pOldHandler, EDI
// modify handler
MOV EBX, pNewHandler
MOV WORD PTR [ESI], BX
ROL EBX, 16
MOV WORD PTR [ESI + 6], BX
// enable ints
POPFD
}