11.6 Interrupt functions

-------------------------

An interrupt function is defined as follows:

interrupt function_name ()

{

// here must be a code of processing

}

Interrupt functions do not automatically save any registers, and no

registers are of themselves loaded before passing control to the interrupt

processor, so that you are responsible for saving the register values to

the stack and returning them, and then loading register DS with the

necessary value.

Here is an example of an interrupt handler which contains the values of

all registers and loads register DS:

interrupt safe_handle ()

{

$ PUSH DS

$ PUSH ES

$ PUSHA // this command requires at least a 286

DS = CS; // here DS is loaded for operation with memory model 'tiny'

/* here you make its processing /

$ POPA // this command requires at least a 286

$ POP ES

$ POP DS

}

When the interrupt function finishes, it automatically generates an

instruction to exit interrupt processing - IRET.