С для профессиональных программистов

       

Использование int86()


Вызовы BIOS используют программные прерывания. BIOS имеет несколько различных прерываний для разных целей. Одно из них мы будем использовать для доступа к экрану. Это прерывание 16 (10Н), которое используется для доступа к дисплею. (Если вы не знакомы с доступом к BIOS, то вы найдете хорошее описание в моей книге "Си: Полный справочник", Беркли, 1987). Как и многие прерывания BIOS, прерывание 16 имеет несколько режимов, выбор которых выполняется по значению регистра AH. Если функция возвращает значение, то оно заносится в регистр AL. Однако, иногда для возвращения нескольких значений используются другие регистры. Для доступа к прерываниям BIOS вам придется использовать функцию Си int86(). (Некоторые компиляторы могут называть эту функцию другим именем, но MicroSoft C и Турбо Си называют ее int86(). Последующие рассуждения ориентированы на эти трансляторы, но вы можете их обобщить.

Функция int86() имеет следующую форму:

int int86(num,inregs,outregs)

int num; /* номер прерывания */

union REGS *inregs; /* входные значения регистров */

union REGS *outregs; /* выходные значения регистров */

Функция int86() возвращает значение регистра АХ. Тип REGS описывается в заголовке DOS.H. Этот тип показан здесь так, как он определен в Турбо Си, однако, он аналогично определен в MisroSoft C и в других компиляторах.

struct WORDREGS

unsigned int ax, bx, cx, dx, si, di, cflag, flags;

;

unsigned char al, ah, bl, bh, cl, ch, dl, dh;

union REGS

struct BYTEREGS h;

in.h.ah=5;

int86(16,&in,&out);



Содержание раздела