intr

 Функция            Альтернативный интерфейс к прерываниям микро-
                    процессора 8086.

 Синтаксис          #include 
                    void intr(int intr_num, struct REGPACK *preg);

 Файл, содержащий   dos.h
 прототип

 Описание           Функция intr поддерживает альтернативный интерфейс
                    для выполнения программных прерываний. Она генери-
                    рует прерывание микропроцессора 8086, заданное
                    аргументом intr num.

                    Функция intr перед выполнением прерывания копирует
                    значения регистров из структуры REGPACK *preg
                    непосредственно в регистры. После завершения пре-
                    рывания функция intr копирует текущее значение ре-
                    гистров в параметр preg. Значения флажков остаются
                    законсервированными.

                    Функции intr передаются следующие параметры:

                    intr num - номер выполняемого прерывания;

                    preg - адрес структуры, содержащий:

                       (a)- значения регистров перед вызовом;
                       (b)- значения регистров после вызова прерыва-
                            ния.

                    Структура REGPACK объявленна в dos.h следующим об-
                    разом:

                    struct REGPACK
                       {
                       unsigned r_ax, r_bx, r_cx, r_dx;
                       unsigned r_bp, r_si, r_di, r_ds, r_es, r_flags;
                       };

 Возвращаемое       Никакое значение не возвращается. Структура
 значение           REGPACK *streg содержит значения регистров после
                    вызова прерывания.

 Переносимость      Функция уникальна семейства микропроцессоров 8086.

 Смотрите также     geninterrupt int6, int6x intdos intdosx

 Пример:

 #include
 #include
 #include
 #include

 #define CF 1  /* флаг переноса */

 int main(void)
 {
    char directory[80];
    struct REGPACK reg;
    printf("Введите директорию, куда перейти:");
    gets(directory);
    reg.r_ax = 0x3b << 8;
    reg.r_dx = FP_OFF(directory);
    reg.r_ds = FP_SEG(directory);
    intr(0x21,®);
    if(reg.r_flags & CF)
       printf("Ошибка при смене директории\n");
    getcwd(directory);
    printf("Текущая директория: %s",directory);
    return 0;
 }