Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 93
Посещений за месяц: 463
Посещений за год: 14618


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


  • Главная.
  • Новости.
  • Программы.
  • Файлы.
  • Контакты.
  • Чат "Пиво".
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Прерывания БСВВ.

     INT 0 - деление на ноль.
     Прерывание через вектор 0 генерируется процессором в ситуации, когда результат выполнения инструкции DIV или IDIV не помещается в регистр или ячейку памяти, а также при попытке деления на 0. БСВВ устанавливает пустой обработчик прерывания 0, возвращающий управление следующей инструкции процессора. При загрузке АДОС устанавливается другой обработчик INT 0. Он выводит на экран сообщение "Деление на ноль" и возвращает управление АДОС. Обычно АДОС прекращает выполнение прикладной программы, вызвавшей это прерывание.

     Замечание: в компьютерах на основе микропроцессоров Intel 80286 и 80386 обработчик INT 0, аналогичный обработчику АДОС, устанавливается БСВВ, поскольку эти микропроцессоры при прерывании 0 зыгружают в стек адрес инструкции DIV (IDIV), а не адрес следующей инструкции.

     INT 1 - режим пошагового выполнения программы.
     Прерывание через вектор 1 генерируется после выполнения любой инструкции в тех случаях, когда флаг TF процессора установлен в 1. Флаг TF сбрасывается любым прерыванием, так что обработчик пошагового режима не будет сам выполняться в этом режиме, но после выхода из него TF будет вновь установлен.

     БСВВ устанавливает пустой обработчик INT 1, так что установка флага TF приведет лишь к (значительному) замедлению выполнения программы. АДОС не изменяет и не использует INT 1, но это прерывание используется в большинстве отладчиков, в частности, в отладчике DEBUG АДОС.

     INT 2 - немаскируемое прерывание.
     Прерывание генерируется при выполнении некоторых, зависящих от модели компьютера условий, обычно связанных с ошибками. Во многих моделях комптютеров немаскируемое прерывание генерируется при сбоях памяти. В некоторых моделях это прерывание используется для сигналов процессору от арифметического сопроцессора. Обработчик прерывания 2, устанавливаемый БСВВ, зависит от модели компьютера. В ПП ЭВМ "Искра-1030", где немаскируемое прерывание связано с ошибками памяти, на экран выводится сообщение "НП", и процессор входит в бесконечный цикл. В других компьютерах сообщение может содержать адрес ячейки памяти, вызвавшей ошибку.

     АДОС не изменяет и не использует обработчик немаскируемого прерывания, однако выполняемые под управлением АДОС программы, распознающие и использующие арифметический сопроцессор, могут устанавливать собственные обработчики INT 2 для его поддержки.

     Прерывание 2 - единственное прерывание, которое нельзя замаскировать очисткой флага IF процессора (инструкцией CLI). Во многих компьюьерах, предусмотрен специальный порт (в "Искра-1030" порт 0A0H) для маскирования этого прерывания.

     Замечания: 1. В PC jr немаскируемое прерывание присоединено к прерыванию от клавиатуры.

     2. В System/2, исключая модель 30, немаскируемое прерывание выдает на экран один из четырех кодов ошибки:

     110 - сбой памяти на системной плате;

     111 - активна проверка канала ввода-вывода (предполагается наличие памяти в канале);

     112 - тайм-аут сторожа (Watchdog) - обнаружено прерывание от некоторого таймера, мешающее работе системы;

     113 - тайм-аут шины НДП - некоторое устройство пытается захватить шину данных больше чем на 7.8 мксек.

     3. В PC Convertible немаскируемое прерывание присоединено к прерываниям от клавиатуры, дискетных устройств, часов, и вызывается проверкой канала ввода-вывода.

     4. В системах с сопроцессором 8087 ошибка сопроцессора вызывает немаскируемое прерывание.

     В системах с сопроцессором 80287 или 80387 ошибка сопроцессора вызывает прерывание через линию IRQ 13; обработчик этого прерывания для совместимости вызывает прерывание 2.

     5. Если пользователь хочет обрабытывать немаскируемые прерывания от сопроцессора, то он должен обрабатывать и другие ошибки. В частности, если при выполнении oьработчика немаскируемого прерывания происходит ошибка немаскируемого прерывания, то управление должно быть передано системному обработчику INT 2.

     INT 3 - точка прекращения.
     Для вызова прерывания 3 предусмотрена специальная инструкция процессора INT 3, отличающаяся от других инструкций INT тем, что она имеет длину один байт. Это позволяет многим отладчикам (в частности, DEBUG) использовать прерывание 3 для установки точки прекращения программы. Отладчик заменяет байт инструкции в точке прекращения байтом инструкции INT 3 и восстанавливает его при достижении точки прекращения.

     БСВВ устанавливает пустой обработчик INT 3, который не заменяется и не используется АДОС.

     INT 4 - арифметическое переполнение.
     Прерывание через вектор 4 вызывается специальной инструкцией INTO, если при ее выполнении установлен в 1 флаг OF пройессора. Оно может быть также вызвано обычной инструкцией прерывания (INT 4) независимо от состояния OF.

     БСВВ устанавливает пустой обработчик INT 4, который не заменяется и не используется АДОС. Многие программы, в частности, компиляторы и программы, ими генерируемые, устанавливают собственные обработчики INT 4, сигнализирующие об арифметическом переполнении.

     INT 5 - печать экрана.
     Прерывание 5 устанавливается БСВВ ПП ЭВМ любой модели на выполнение функции печати экрана. При выполнении этого прерывания, которое может быть вызвано инструкцией INT 5 программы или нажатием специальной клавиши или комбинации клавиш на клавиатуре компьютера, содержимое экрана выводится на устройство печати LPT1.

     Вызов INT 5 не требует и не возвращает никакой информации в регистрах процессора, но устанавливает код состояния печати экрана в байте памяти с адресом 0000:0500H:

     00H - функция не вызвана или завершена;
     01H - функция выполняется;
     0FFH - обнаружена ошибка при выполнении функции (обычно, устройство печати выключено).

     Функция печати экрана выполняется при разрешенных прерываниях, так что, вообще говоря, состояние экрана может быть изменено во время печати. Позиция курсора на экране сохраняется перед выполнением функции и восстанавливается при ее завершении.

     Функция выполняется независимо от установленного режима дисплея (см. функцию 0 INT 10H), но на печать выводится только содержимое текстового экрана. В графических режимах области экрана, не содержащие изображений символов, отображаюся пробелами.

     АДОС не заменяет обработчик прерывания 5, но команда АДОС GRAPHICS устанавливает резидентным обработчик, позволяющий копировать графический экран.

     Замечание: на PC Convertible обнаружение ошибки состояния функции прекращает вывод на печать и выдает звуковой сигнал. Печать экрана прекращается также по BREAK.

     INT 8 - прерывание от системного таймера.
     Через вектор 8 выполняется аппаратное прерывание (IRQ 0), активируемое системным таймером 18.2 раза в секунду (примерно через 55 мсек). БСВВ устанавливает обработчик прерывания, который:

     - инкрементирует счетчик прерываний от системного таймера;
     - декрементирует счетчик времени до выключения двигателя дискетных устройств;
     - генерирует прерывание 1CH.

     Cчетчик прерываний от системного таймера хранится в формате длинного целого (32 бита, младшее слово предшествует старшему) в ячейке памяти по адресу 0000:046СH. Когда содержимое счетчика достигнет значения, соответствующего 24 часам, то оно сбрасывается в 0, а в байте с адресом 0000:0470 устанавливается флаг этого события.

     Счетчик времени до выключения двигателя дискетных устройств устанавливается в значение, обычно соответствующее двум секундам, после выполнения любой операции доступа к дискете. Каждое прерывание от системного таймера декрементирует счетчик до тех пор, пока он не сбросится в 0. В этот момент двигатель дискетных устройств будет выключен. Счетчик времени до выключения двигателя располагается в слове по адресу 0000:0440.

     Прерывание 1CH резервируется для прикладных программ, желающих использовать системный таймер для своих целей. АДОС не заменяет обработчик прерывания 8.

     Замечание: Для PC Convertible этот обработчик прерываний вызывает модуль пользователя через прерывание 4AH всякий раз, когда распознается прерывание тревоги.

     INT 9 - прерывание от клавиатуры.
     Контроллер клавиатуры генерирует запрос на прерывание 9 (IRQ 1) всякий раз, когда нажимается или отпускается какая-либо клавиша. Если какая-либо клавиша, исключая некоторые регистровые клавиши, остается нажатой более 0.5 сек, то контроллер выдает повторные прерывания, как бы по новому ее нажатию, каждые 0.1. сек. Контроллер содержит внутренний буфер, способный хранить информацию o нескольких (обычно, о двадцати) клавиатурных действиях, при переполнении внутреннего буфера информация теряется.

     БСВВ устанавливает вектор 9 на адрес обработчика клавиатурных прерываний, который принимает и удаляет из внутреннего буфера клавиатуры код нажатия или отпускания клавиши (скан-код) и преобразует его в код символа по следующим правилам:

     1. Если нажата клавиша, которой соответствует какой-либо символ кода ПП ЭВМ, то скан-код клавиши и код символа размещаются в буфере. Буфер клавиатуры длиной 32 байта располагается в области памяти, начиная с адреса 0000:041EH, и представляет собой кольцевой буфер. Указатель конца буфера (т.е. указатель свободной памяти в буфере) располагается в слове по адресу 0000:041CH. После приема знака указатель буфера увеличивается на 2 и, если он начинает указывать за пределы буфера, то устанавливается на начало. Вырабатываемый код символа зависит от состояния регистров клавиатуры.

     2. Если нажата нажата или отпущена регистровая клавиша, то в буфер не заносится никакой информации, а изменяются байты состояния регистров клавиатуры 0000:0417H и 0000:0418H. Из регистровых клавиш высший приоритет имеет клавиша Alt, затем Ctl и, наконец, клавиша перехода на верхнмй регистр Shift. Соответствующие состояния устанавливаются только на время, пока нажата регистровая клавиша, и сбрасываются при ее отпускании. Остальные регистровые клавиши - CapsLock, Num Lock, Scroll Lock - действуют как триггеры: каждое нажатие переключает соотвествующее состояние. Регистр Shift действует только на алфавитные клавиши, набор которых зависит от текущей установки алфавита (состояния РУС/ЛАТ), инвертируя для них смысл нажатой клавиши перехода на верхний регистр. Регистр Num Lock аналогично действует на клавиши цифровой клавиатуры, позволяя вырабатывать цифровые коды без перехода на верхний регистр (обычно в таком случае вырабатываются расширенные коды управления курсором - см. табл. ??).

     3. Последовательность нажатий цифровых клавиш в состоянии Alt рассматривается как поступление десятичных цифр кода одного символа, и сохраняется в драйвере. При отпускании клавиши Alt остаток от деления на 256 введенного числа помещается в буфер вместе со скан-кодом 0.

     4. Нажатие клавиши Del в состоянии Alt+Ctrl (т.е. при одновременно нажатых клавишах Alt и Ctrl) вызывает системный сброс: флаг сброса - слово по адресу 0000:0472 - устанавливается в 1234H, и управление передается на тесты самопроверки. Поскольку флаг клавиатурного сброса установлен, то при выполнении тестов обходятся тесты ОЗУ.

     5. Нажатие клавиши Num lock в состоянии (т.е. вместе с) Ctrl приостанавливает выполнение любой программы до нажатия какой-либо клавиши.

     6. Нажатие клавиши Print Screen на верхнем регистре вызывает прерывание 5, т.е. вывод на печать копии экрана.

     7. Нажатие клавиши Scroll Lock в состоянии Ctrl вызывает прерывание 1BH (Break).

     8. Отпускание любой клавиши, кроме некоторых регистровых, игнорируется.

     Замечания: здесь приведено описание работы обработчика клавиатурных прерываний ПП ЭВМ "Искра-1030". Большая часть сказанного справедлива для клавиатурных драйверов любой ПП ЭВМ. В частности, все, что не имеет отношения к русскому алфавиту, справедливо для компьютеров IBM PC и IBM XT. Однако, ввиду отсутствия международного стандарта на клавиатуры ПП ЭВМ, в некоторых моделях нарушается соответствие между скан-кодами клавиш и кодами символов. АДОС не использует это соответствие, обрабатывая только коды символов или расширенные коды (см. табл.??? в п. ??), но для работы некоторых программ (например, Бейсик-интерпретатора) такое соответствие может оказаться необходимым.

     Для AT, PC Convertible, System/2 и некоторых моделей XT (БСВВ 1986 г.) перед выполнением системного сброса вызывается функция (AH)=85H прерывания 15H, чтобы информировать систему о подготовленном сбросе. Кроме того, клавиатурное прерывание может вызывать прерывание 15H с (AX) = 9102H, чтобы сообщить системе о наличии знака в буфере.

     В некоторых моделях компьютеров (включая перечисленные выше) БСВВ обеспечивает возможность преобразования скан-кодов клавиш перед размещением их в буфере. Для этого после приема каждого знака от клавиатуры вызывается функция (AH) = 4FH прерывания 15H, позволяющая перекодировать байт, принятый от клавиатуры (из порта 60H).

     INT 11H - определение набора подключенного оборудования.
     Прерывание 11H возвращает в регистре AX информацию оо оборудовании компьюьера. Ту же информацию можно получить, прочитав слово с адресом 0000:0410H. Биты слова конфигурации оборудования кодируются следующим образом:

     биты 15 - 14 - число подключенных устройств печати ( 0 - 3);
     бит 13 (в некоторых моделях) - установлен внутренний модем;
     бит 12 (в некоторых моделях) - установлен адаптер игр;
     биты 11 - 9 - число адаптеров или портов данных асинхронной связи;
     бит 8 - не используется;
     биты 7 - 6 (только если бит 0 равен 1) - число дискетных устройств (00 - 1, 01 - 2, 10 - 3, 11 - 4);
     биты 5 - 4 - режим экрана, устанавливаемый при инициализации БСВВ: 00 - резервируется, 01 - режим 1 (40*25, см. 11.1), 10 - режим 3 (80*25), 11 - режим 7 (80*25);
     биты 3 - 2 - резервируются (в некоторых моделях указывают объем памяти на системной плате);
     бит 2 - установлено устройство типа "мышь";
     бит 1 - установлен арифметический сопроцессор;
     бит 0 - имеется хотя бы одно дискетное устройство, с которого возможна загрузка системы;
     Единичное значение бита указывает на установленное оборудование.

     Замечания: для определения числа установленных жестких дисков можно использовать вызов функции 8 INT 13H.

     Наличие сопроцессора распознается только по установке соответствующего переключателя на системной плате. Лучший способ проверить наличие сопроцессора - попытаться выполнить его инструкцию и проверить результат.

     INT 12H - определение объема памяти.
     Прерывание 12H возвращает в регистре AX объем памяти в килобайтах. Ту же информацию можно получить, прочитав слово с пдресом 0000:0413H. Независимо от модели компьюьера, возвращается только объем системной памяти (до адреса A000:0000); значение не может превосходить 640К. При определении объема системной памяти БСВВ проверяет ее непрерывность и пригодность, но начальный объем для проверки во многих компьюьерах определяется установкой переключателей конфигурации на системной плате.

     Для определения объема дополнительной памяти служат функции 88H и 0C1H прерывания 15H.

     INT 14H - функции асинхроннной связи.
     Следующие функции INT 14H поддерживают протокол RS-232-C: (AH) = 0 - инициализация порта асинхронной связи; 1 - передача байта; 2 - прием байта; 3 - получить состояние; 4 - расширенная инициализация; 5 - расширенное управление портом связи.

     Последние две функции применяются только в System/2. Сохраняются значения всех регистров, кроме AX. Базовые адреса портов адаптеров связи и значения таймаутов устанавливаются при инициализации БСВВ.

    >>

    BitByByte, 2000г. (2025).