170_______________________________________________

• AX = ЮН SetHideRange—установка пределов, в которых курсор не показывается. Устанавливает границы прямоугольника, внутри которого изображение курсора не показывается.

• AX = OCH SetMouseHandler/RemoveMouseHandler — подключение/отключение пользовательской подпрограммы обработки прерываний по мыши.

Из содержания этого стандарта ясно, что для выполнения по крайней мере 1, 2 и 3 функций (показать курсор мыши, спрятать курсор мыши и прочитать состояние мыши) наша подпрограмма должна передать из вызывающей программы в регистр АХ целочисленное значение соответствующее вызываемой функции, вызвать прерывание и для 3 функции вернуть содержимое регистров ВХ, СХ, DX в вызывающую программу. Кроме того подпрограмма должна сохранить значения регистров процессора на время вызова прерывания и восстановить их перед возвратом в вызывающую программу Поскольку для обмена данными с вызывающей программой используется адресное пространство кодов подпрограммы, в регистр сегмента данных засылается значение сегмента кодов. Фрагмент листинга (документа о результатах трансляции ассемблерной программы) показывает насколько удобным является механизм вызова драйверов посредством прерываний Приведенный текст содержит 6 столбцов В первом столбце дается условный адрес первого байта машинного кода, группы которых записаны во втором столбце, в третьем — метка, в четвертом — оператор или директива, в пятом — адреса и/или параметры, а в шестом — комментарии Первый и второй столбцы содержат шестнадцате-ричные коды, третий, четвертый и пятый — программу на языке Ассемблер, а шестой — комментарии (они также записаны по правилам Ассемблера)

0000 XchgM PROC far .дальний вызов подпрограммы 0000 50 push ax .сохранение регистра AX

0001 53 push bx .сохранение регистра ВХ

0002 51 push ex .сохранение регистра СХ

0003 52 push dx .сохранение регистра DX

0004 IE push ds .сохранение регистра DS

0005 OE push cs .пересылка сегмента кодов

0006 IF pop ds , в сегмент данных

0007 Al OOlE mov ax, RegAX .запись значения АХ OOOA CD 33 int 33h .вызов драйвера мыши ооос 89 IE 0020 mov RegBX, bx , чтение значения ВХ 0010 89 OE 0022 mov RegCX, ex .чтение Значения СХ 0014 89 16 0024 mov RegDX, dx .чтение значения DX

0018 IF pop ds .восстановление регистра DS

0019 5A pop dx .восстановление регистра DX OO1A 59 pop ex .восстановление регистра CX 001В 5в pop bx .восстановление регистра BX OOlc 58 pop ax .восстановление регистра AX OO1D ев ret .возврат из подпрограммы OOlE O29A RegAX DW 666 .память для значения АХ 0020 0309 RegBX DW 777 .память для значения ВХ 0022 0378 RegCX DW 888 .память для значения СХ