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

Примеры прерывающих подпрограмм

Изменение флага состояния

Для того чтобы каждый раз не вспоминать о необходимости изменить текущее значение переменной pntstat, мы рекомендуем просто включить в текст подпрограмм showpnt (см. пример 6.5), Hidepnt (см. пример 6.6) и Tgipntr (см. пример 6.4) следующие команды:

or pntstat, 01; в подпрограмму Showpnt
and pntstat, OFeh; в подпрограмму Hidepnt
xor pntstat, 01; в подпрограмму Tgipntr

Все три команды изменяют состояние только младшего разряда pntstat, это позволяет, в случае необходимости, использовать остальные разряды pntstat для хранения других нужных для задачи признаков.

Установка Mousm

Для установки подпрограммы Mousm после действий, описанных в примере 6.9, надо выполнить группу команд, приведенную в примере 6.15.

Пример 6.15. Установка прерывающей подпрограммы Mousm.

; Дополнение к примеру 6.9
push es; сохраняем содержимое es
push cs; помещаем в стек содержимое cs
pop es; и выталкиваем его в es
lea dx, Mousm; пишем в dx адрес "Mousm"
mov ex, 01; код события "перемещение курсора"
mouse ОС; обращаемся к драйверу мыши
pop es; восстанавливаем содержимое es

Подведем итог всему сказанному в данном разделе.

Перемещение курсора слабо зависит от действий основной задачи и его можно выполнять в режиме прерываний, поступающих от драйвера. Правда, в таком случае возникает вопрос о том, как задача узнает, что курсор перемещался, если для ее выполнения это необходимо знать. На этот случай мы использовали в примере 6.14 переменную curmp. Предполагается, что в нужные моменты времени задача проверяет значение этой переменной и узнает о факте перемещения курсора. Вы можете отказаться от этой переменной и ввести другой признак перемещения курсора, но в любом случае без анализа специального признака задача не узнает о факте перемещения курсора, поскольку оно выполняется без ее прямого участия.

Анализ состояния кнопок

Текущее состояние мыши, как правило, надо анализировать в тех случаях, когда это необходимо для выполнения задачи. Поэтому мы рекомендуем, по крайней мере, на первое время использовать опрос состояния. При этом вместо обращений к драйверу мыши надо проверять значения переменных LBevent и RBevent, которые формирует вызываемая драйвером подпрограмма, при наступлении соответствующих событий. Вместо 8 разных значений, перечисленных в табл. 6.2, в режиме прерываний LBevent и RBevent могут иметь только три значения 0, 1 и 2.

Переменная Mstatus имела вспомогательное значение и в данном случае она не используется. Вместо нее мы введем три новые переменные:

Noevent db 0; признак изменения (1) состояния кнопок

Xasevent dw 0; координата X в момент изменения состояния кнопок

Yasevent dw 0; координата Y в момент изменения состояния кнопок

При изменении состояния кнопок подпрограмма устанавливает младший разряд переменной Noevent, очищать эту переменную должна задача после обработки события. Переменные Xasevent и Yasevent введены на тот случай, когда надо знать, в каком месте находился курсор в момент нажатия или отпускания кнопок мыши.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.