Иллюстрированный самоучитель по Assembler


Программирование аппаратных средств - часть 8


Коды, генерируемые мышью, могут зависеть от ее типа, что надо учитывать при подготовке этого примера. Для получения значений генерируемых кодов можно предусмотреть в обработчике прерываний вывод их на экран с помощью функции прерывания 10h BIOS, как это было сделано, например, в примере 3-5, или прямым выводом в видеобуфер. Следует только иметь в виду, что перехват любого прерывания от последовательного интерфейса должен обязательно сопровождаться чтением из его порта данных, так как интерфейс может принять очередной байт данных только после чтения предыдущего и освобождения своего регистра данных.

Пример 3-12. Программирование мыши в режиме прерываний


.586 ;Будут команды новых процессоров

code segment use16 ;16-разрядное приложение

assume CS : code,DS:code ;Данные в сегменте команд

main proc

push CS ;Настроим DS

pop DS ;на сегмент команд

;Сохраним обработчик прерываний последовательного порта

mov AX,350Ch ;Функция 35h, вектор 0Сh

int 21h

mov word ptr old_Oc,BX ;Сохраним смещение

mov word ptr old_Oc+2,ES ;Сохраним сегмент

;Установим наш обработчик прерываний последовательного порта

mov AX,25ОСЬ ;Функция 25h, вектор 0Сh

mov DX,offset new_0c ;Адрес нашего обработчика

int 21h

;Остановим программу функцией ввода с клавиатуры

mov AH,01h

int 21h

;Восстановим исходный обработчик драйвера мыши

mov AX,250Ch ;Функция 25h, вектор 0Сh

Ids DX,old_0c ;Сохраненный адрес

int 21h

mov AX,4C00h ;Завершим программу

int 21h

main endp

new_0c proc

pusha ;Сохраним все регистры

push DS ;Сегментные регистры не

push ES ;сохраняются командой pusha

mov DX,3F8h ;Порт данных

in AL,DX ;Прочитаем

cmp AL, 60h ;Левая клавиша — код 60h

je Ibtn ;Переход на отработку

cmp AL, 5Oh ;Правая клавиша — код 5Oh

je rbtn ;Переход на отработку

;Завершение обработчика прерываний

outret:pop ES ;Восстановим сегментные

pop DS ;регистры

mov AL,20h ;Команда EOI

out 20h,AL ;в контроллер прерываний

рора ;Восстановим все регистры

iret ;Выход из прерывания

;Если нажата левая клавиша мыши




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



Книжный магазин