ТОР 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; } Рассмотрим некоторые примеры использования программных прерываний. Не нашли, что искали? Воспользуйтесь поиском:
|