Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Основной набор функций




Для работы с прерываниями в Турбо-Си используются функции библиотеки с прототипами расположенными в dos.h. Рассмотрим 3 из них.

void geninterrupt(int intr_num),

где intr_num – код прерывания (или ещё говорят номер обработчика прерывания). Для указания необходимых функций прерывания, сохранения значений регистров перед прерыванием и восстановления их значений после прерывания можно воспользоваться псевдопеременными, имена которых соответствуют регистрам процессора: _AX, _AL, _AH, _BX, _BL, _BH, _CX, _CL, _CH, _DX, _DL, _DH, _SI, _DI, _BP, _SP, _CS, _ES, _DS, _SS. К регистру IP обращение через псевдопеременную невозможно.

int int86(int intno, union REGS * inregs, union REGS * outregs),

int86 выполняет прерывание с кодом intno с предварительной загрузкой регистров из inregs и записью значений регистров после прерывания в outregs. Сохранение и восстановление регистров. соответственно до и после прерывания, выполняется автоматически. До вызова int86() необходимо заполнить поля объединения inregs. Шаблон union REGS содержится в dos.h:

union REGS {

struct WORDREGS x;

struct BYTEREGS h;

}

struct WORDREGS{

unsigned char ax, bx, cx, dx, si, di, cflag, flags;

}

struct BYTEREGS{

unsigned char al, ah, bl, dh, cl, ch, dl, dh;

}

Поля cflag и flags, соответственно, содержат значение флага переноса и регистра флагов.

Пример

Функция устанавливает режим работы видеоадаптера.

void set_mode(int mode)

{

_AL = (char) mode; // mode – содержит код режима

_AH = 0x00;

geninterrupt(0x10);

 

}

 

Следующая функция должна получать на вход 2 параметра:

void intr(int intno, struct REGPACK * preg)

Когда выполняется вызов, то регистры процессора загружаются из структуры preg. В эту же структуру заносятся значения регистров после прерывания. Сохранение и восстановление программных регистров выполняется автоматически. Структура 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;

}

Рассмотрим некоторые примеры использования программных прерываний.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных