Вот готовая программа, доделал:
| Код | .386 Data SEGMENT PARA PUBLIC 'Data' USE16 pg db 0 Data ENDS Code SEGMENT PARA PUBLIC 'Code' USE16 ASSUME cs:Code, ds:Data, es:Data ;----------------------------------------------------------------------------------------- ; 1) для переключения видеостраниц используется Функция 05h прерывания 10h: ; установить текущую видеостраницу: Вход: AH =05h AL=видеостраница ; 2) в текстовом режиме как правило работают в 3-ем видеорежиме 80х25 символов ; 3) под текстовый видеобуфер отведено C0000h - B8000h = 8000h = 32768 байт ; 4) символ в видеобуфере занимает 2 байта = 1 байт под атрибут + 1 байт под код символа ; считаем: ; 1) 32768 / 2 = 16384 символов можно разместить в видеобуфере ; 2) 80 * 25 = 2000 + 48 = 2048 символов на одной видеостранице ; 3) 16384 / 2048 = 8 страниц ;-----------------------------------------------------------------------------------------
start: mov ax, 3 ; устанавливаем видеорежим и стираем с экрана int 10h push 0B800h ; сегментна адреса відеобуфера pop es xor di, di ; начинаем с левого верхнего угла mov ax, 0F41h ; белая буква А на черном фоне mov cx, 8 ; заполняем 8 страниц
a1: push cx mov cx, 2048 rep stosw pop cx inc ax ; переходим к следующей букве loop a1 mov ax, 0 ; Функция 00h предназначена для выяснения, загружен ли в память int 33h ; драйвер мыши. Если эта функция возвращает AX = 0, то драйвер test ax, ax ; отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в jz exit ; регистре BX - число кнопок мыши ;----------------------------------------------------------------------------------------- mov ax, 0Ch ; Функция 0Ch позволяет программно задать реакцию на события push cs ; связанные с мышью: ее перемещения, нажатие и отпускание кнопок. pop es ; События, на которые необходимо реагировать, должны быть отмечены mov cx, 100b ; единицами в соответствующих разрядах регистра CX. mov dx, offset mouse ; функции драйвер мыши на каждое из заданных событий int 33h ; будет реагировать вызовом обработчика событий - подпрограммы,
;FAR-указатель на адрес которой был указан в регистрах ES:DX ;Номер бита Назначение маски вызова ;0 Вызвать, если мышь перемещается ;1 Вызвать, если левая клавиша нажата ;2 Вызвать, если левая клавиша отпущена ;3 Вызвать, если правая клавиша нажата ;4 Вызвать, если правая клавиша отпущена ;6 Вызвать, если средняя клавиша отпущена ;5 Вызвать, если средняя клавиша нажата ;-----------------------------------------------------------------------------------------
mov ax, 1 ;Функция 01h включает изображение курсора мыши на экране. int 33h
;-----------------------------------------------------------------------------------------
mov ah, 0 ; ожидание нажатия любой клавиши int 16h
mov ax, 0Ch mov cx, 0 ;удалить обработчик событий мыши int 33h
exit: mov ax, 4C00h ; поверненя в MS-DOS int 21h;
;-----------------------------------------------------------------------------------------
mouse proc FAR push ax push ds mov ax,Data mov ds,ax
mov ah,5 ; поменять видео страницу mov al,pg int 10h inc pg ; увеличить номер видеостраницы and pg, 0111b pop ds pop ax retf ; выйти из программы mouse endp code ENDS end start
|
|