Использование 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);