CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
int86, int86x - программное прерывание
Описание
Эти функции выполняют программное прерывание 8086. intnum является номером прерывания (0...255). regsin является указателем на структуру, содержащую значения регистров AX,BX,CX,DX,SI и DI, поступающих с прерыванием. segregs является значением сегментных регистров, пос- тупающих с прерыванием. regsout является указателем на структуру, в которую за- писываются возвращаемые значения регистров. Структуры REGS и SREGS определены в dos.h файле. Отсы- лаем Вас к руководствам по аппаратуре и программному обеспечению для знакомства с номерами прерываний и со- ответствующими функциями на Вашей машине.
Использование
#include <dos.h> /* структуры регистров */ int int86(int intnum, union REGS *regsin, union REGS *regsout); int int86x(intnum, union REGS *regsin, union REGS *regsout, struct SREGS *segregs);
Возвращаемое значение
Возвращают значение регистра AX в 8086 по завершению прерывания. Состояние флага 'carry' можно получить из x.cflag в regsout. Не пользуйтесь int86 и int86x для прерываний 0x25 или 0x26. Используйте для этих целей abs_disk_read/ write.
Пример
/* Эта функция воспринимает ввод с клавиатуры и пишет строку на экран посредством BIOS */ #include <dos.h> #include <stdio.h> #define MAXKEY 19 #define BEEP printf("\007") void print(void); void biosprt(void); char buf [MAXKEY], *ptr; int colm = 30, i; union REGS r; main() { system("cls"); printf("Введите строку из 20 литер\n\n"); gets(buf); if (strlen(buf) > 20) printf("Строка длинна, обрезаем\n"); print(); } void print() { r.h.ah = 0х02; r.h.bh = 0; r.h.dh = 12; r.h.d1 = colm; int86 (0х10, &r, &r); for (ptr=buf,i=0; i<=MAXKEY; (biosprt()),i++,ptr++); } void biosprt() { r.h.ah = 0х09; r.h.al = *ptr; r.x.cx = 1; r.h.bl = 0х0f; r.h.bh = 0; int86(0x10, &r, &r); r.h.ah = 0x02; r.h.bh = 0; r.h.dh = 12; r.h.dl = ++colm; int86 (0х10, &r, &r); }
Рекомендация
Смотрите также intdos, bdos.