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

advertisement
http://kappasoft.narod.ru/info/cpp/C_for_prof/Index1.html
Использование 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;
;
struct BYTEREGS
unsigned char al, ah, bl, bh, cl, ch, dl, dh;
;
union REGS
struct WORDREGS x;
struct BYTEREGS h;
;
Как вы можете видеть, REGS - это объединение двух структур. Использование
структуры WORDREGS позволяет рассматривать регистры ЦП как 16-битные числа.
BYTREGS дает вам доступ к отдельным 8-битным регистрам. Например, для доступа к
прерыванию 16, функции 5, вы должны использовать следующую последовательность.
union REGS in,out;
in.h.ah=5;
int86(16,&in,&out);
http://www.codenet.ru/
Download