interrupt the CPU
#include <i86.h> int int86x( int inter_no, const union REGS *in_regs, union REGS *out_regs, struct SREGS *seg_regs );
The int86x() function causes the computer's central processor (CPU) to be interrupted with an interrupt whose number is given by inter_no. Before the interrupt, the CPU registers are loaded from the structure located by in_regs, and the DS and ES segment registers are loaded from the structure located by seg_regs.
All of the segment registers must contain valid values. Failure to do so will cause a segment violation when running in protect mode. If you don't care about a particular segment register, then it can be set to 0, which will not cause a segment violation. The function segread() can be used to initialize seg_regs to their current values.
Following the interrupt, the structure located by out_regs is filled with the contents of the CPU registers. The in_regs and out_regs structures may be located at the same location in memory. The original values of the DS and ES registers are restored. The structure seg_regs is updated with the values of the segment registers following the interrupt.
the value of the CPU AX register after the interrupt
int386(), int386x(), int86(), intr(), segread()
#include <stdio.h> #include <i86.h> /* get current mouse interrupt handler address */ void main() { union REGS r; struct SREGS s; r.h.ah = 0x35; /* DOS get vector */ r.h.al = 0x33; /* interrupt vector 0x33 */ int86x( 0x21, &r, &r, &s ); printf( "mouse handler address=%4.4x:%4.4x\n", s.es, r.w.bx ); }
Intel
DOS/16, Windows, Win386, QNX/16, DOS/PM