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