int int86(int int_num, union REGS *in_regs, union REGS *out_regs)
int int86x(int int_num, union REGS *in_regs, union REGS *out_regs, struct SREGS *segregs)
Эти функции не определены стандартом ANSI С.
Функция int86() используется для выполнения программного прерывания, заданного величиной intnum. Содержимое объединения in_regs копируется сначала в регистры процессора, а затем выполняется соответствующее прерывание.
По возвращении объединение out_regs содержит значения регистров центрального процессора в момент возврата из прерывания. Установка флага carry flag означает, что произошла ошибка. Возвращается значение регистра АХ.
Функция int86x() копирует значение segregs—>ds в регистр DS, а значение segregs—>es в регистр ES. Это позволяет программам, откомпилированным для большой модели данных, указывать, какие сегменты использовать во время прерывания.
REGS и SREGS определены в заголовочном файле dos.h.
Функция int86() часто используется для вызова процедур ПЗУ в PC. Например, следующая функция выполняет инструкцию INT 0x10, с кодом функции 0, что вызывает установку видеорежима в состояние, заданное параметром mode: #include <dos.h> /* установка видеорежима */ void set_mode(char mode) { union REGS in, out; in.h.al = mode; in.h.ah = 0; /* установка номера функции */ int86 (0x10, &in, & out); }
