Assembler - язык неограниченных возможностей


Мультиплексорное прерывание - часть 2


/p>


Оказалось, что такого уровня спецификации совершенно недостаточно и резидентные программы по-прежнему работали по-разному, находя немало способов конфликтовать между собой. Поэтому появилась новая спецификация — AMIS (альтернативная спецификация мульти-плексорного прерывания). Все резидентные программы, следующие этой спецификации, должны поддерживать базовый набор функций AMIS, а их обработчики прерываний должны быть написаны в соответствии со стандартом IBM ISP, который делает возможным выгрузку резидентных программ из памяти в любом порядке.

Начало обработчика прерывания должно выглядеть следующим образом:

    +00h: 2 байта — 0EBh, 10h (команда jmp short на первый байт после этого блока)

    +02h: 4 байта — адрес предыдущего обработчика: именно по адресу, хранящемуся здесь, обработчик должен выполнять call или jmp

    +06h: 2 байта — 424Вh — сигнатура ISP-блока

    +08h: байт — 80h, если это первичный обработчик аппаратного прерывания (то есть он посылает контроллеру прерываний сигнал EOI). 00h, если это обработчик программного прерывания или дополнительный обработчик аппаратного

    +09h: 2 байта — команда jmp short на начало подпрограммы аппаратного сброса — обычно состоит из одной команды IRET

    +0Bh: 7 байт — зарезервировано

Все стандартное общение с резидентной программой по спецификации AMIS происходит через прерывание 2Dh. При установке инсталляционная часть резидентной программы должна проверить, не установлена ли ее копия, просканировав все идентификаторы от 00 до 0FFh, и, если нет, установить обработчик на первый свободный идентификатор.


INT 2Dh: Мультиплексорное прерывание AMIS

Ввод: АН = идентификатор программы
AL = 00: проверка наличия
AL = 01: получить адрес точки входа
AL = 02: деинсталляция
AL = 03: запрос на активизацию (для «всплывающих программ»)
AL = 04: получить список перехваченных прерываний
AL = 05: получить список перехваченных клавиш
AL = 06: получить информацию о драйвере (для драйверов устройств)
AL = 07 – 0Fh — зарезервировано для AMIS
AL = 1Fh – 0FFh — свои для каждой программы
Вывод: AL = 00h, если функция не поддерживается
<


Начало  Назад  Вперед