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.
