Аппаратное обеспечение персонального компьютера


           

Программа MSDRIVER


Программа MSDRIVER иллюстрирует способ работы с драйвером событий.

Исходный текст драйвера событий, составленный на языке ассемблера, представлен в листинге 3.5.

Листинг 3.5. Файл msdriver\handler.asm

;**

;.Name       ms_handl

;.Title      Драйвер событий

;

;.Descr      Драйвер событий вызывается драйвером мыши,

;            когда происходит какое-нибудь событие из числа

;            заданных при установке драйвера событий.

;            Функция не должна вызываться из программы

;            пользователя, ее вызывает только драйвер мыши.

;

;.Proto      void far ms_handl(void);

;

;.Params     Не используются

;**

       DOSSEG

DGROUP  GROUP   _DATA

_DATA   SEGMENT WORD PUBLIC 'DATA'

_DATA   ENDS

_TEXT   SEGMENT WORD PUBLIC 'CODE'

       ASSUME  cs:_TEXT, ds:DGROUP, ss:DGROUP

; Флаг вызова драйвера событий

extrn   _ms_flag:word

; Внешние переменные для записи содержимого регистров

extrn   _ms_bx:word

extrn   _ms_cx:word

extrn   _ms_dx:word

extrn   _ms_si:word

extrn   _ms_di:word

extrn   _ms_ds:word

public  _ms_handl

_ms_handl   proc far

       mov     _ms_ds, ds

; Так как на входе в драйвер событий регистр DS указывает на

; сегмент данных драйвера мыши, устанавливаем его на сегмент

; данных программы;

       push    ax

       mov     ax, DGROUP

       mov     ds, ax

       pop     ax

       mov     _ms_bx, bx

       mov     _ms_cx, cx

       mov     _ms_dx, dx

       mov     _ms_si, si

       mov     _ms_di, di

; Устанавливаем флаг вызова драйвера в 1, сигнализируя

; программе о том, что произошло событие.

       mov     _ms_flag, 1

       ret

_ms_handl   endp

_TEXT   ENDS

       END

При вызове этот драйвер вызове устанавливает глобальную переменную _ms_flag в единицу, затем переписывает содержимое всех нужных регистров в соответствующие глобальные переменные.

Программа, установив драйвер событий и сбросив флаг _ms_flag, может выполнять какие-либо действия (например, вывод на экран движущегося изображения), постоянно проверяя флаг _ms_flag.

Содержание  Назад  Вперед