Программирование на C и C++

Онлайн справочник программиста на C и C++

int86, int86x

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);
}