Работа с адаптером дисплея в текстовом режиме, страница 2

        jz endin              ; завершаем разбор числа

; если это не замыкающий 0, то проверяем его на правильность

        cmp cl,'0'            ; символ < 0

        jl endin                 

        cmp cl,'9'            ; символ > 9

        ja endin              ; на этом разбор числа заканчивается

        sub cl,'0'            ; делаем из символа число

        mul bx                ; умножаем на 10

        add ax,cx             ; прибавляем к остальным

        inc si                ; указатель на следующий символ

        jmp ii2               ; повторяем

; все символы из буфера обработаны число находится в ax

endin:

        cmp di,1              ; если установлен флаг, то

        jnz ii3

        neg ax                ; делаем число отрицательным

ii3:

        pop di

        pop si

        pop bx

        pop dx

        pop cx

        ret

InInt   endp

;-------------------------------------------------------------------------

        end main              ; конец программы

ГУАП

КАФЕДРА № 44

ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ассистент

А.Б. Бубликов

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №3

Работа с адаптером мышь

по курсу: ИНТЕРФЕЙСЫ ПЕРИФЕРИЙНЫХ УСТРОЙСТВ

РАБОТУ ВЫПОЛНИЛ(А)

СТУДЕНТ(КА) ГР.

В8441

Тарасов Р.С.

подпись, дата

инициалы, фамилия

Санкт-Петербург 2011

Вариант 1. Написать программу, которая инициализирует манипулятор мышь и на экране, в текстовом режиме, рисует в месте указателя по нажатия на левую кнопку мыши любой символ на выбор, а при нажатии на правую стирает его.

Ниже перечислены использованные функции прерывания INT 33H для работы с мышью:

Инициализация мыши:

Значение регистра AX=0000h.

Показать курсор:

Значение регистра AX=0001h.

Установить обработчик событий:

·  AX = 000Ch

  • ES:DX = адрес обработчика
  • СХ = условие вызова
    • бит 0 - любое перемещение мыши
    • бит 1 - нажатие левой кнопки
    • бит 2 - отпускание левой кнопки
    • бит 3 - нажатие правой кнопки
    • бит 4 - отпускание правой кнопки
    • бит 5 - нажатие средней кнопки
    • бит 6 - отпускание средней кнопки

·  СХ = 0000h - отменить обработчик

Обработчик оформляется в виде дальней процедуры. При вызове обработчика регистр СХ содержит Х-координату, а DX - Y-координату. В текстовом режиме обе координаты надо разделить на 8, чтобы получить номер строки и столбца соответственно.

Текст программы:

        .MODEL SMALL

        .STACK 100h

        .DATA

Message1 DB 'Программа демонстрирует работу с драйвером мыши',13,10,'$'

Message2 DB 'Отсутствует драйвер мыши :(',13,10,'$'

        .CODE

main:

; подготовительные действия

        mov ax,@Data         ; устанавливаем регистр DS,

        mov ds,ax            ; чтобы он указывал на сегмент данных

        mov ax,@Code         ; устанавливаем регистр ES,

        mov es,ax            ; чтобы он указывал на сегмент кода

        xor ax,ax            ; проверяем наличие драйвера мыши в системе

        int 33h

        cmp ax,0

        jne exist            ; драйвер присутствует

        mov ah,9             ; выводим сообщение об отсутствии драйвера

        lea dx,Message2

        int 21h       

        jmp exit

exist:

; драйвер мыши найден, устанавливаем обработчик событий

        mov ax,3             ; включаем текстовый видеорежим 25х80

        int 10h

        mov ah,1             ; выключаем текстовый курсор

        mov ch,20h

        int 10h

        mov ah,2             ; выставляем курсор,

        xor bh,bh            ; чтобы отцентровать надпись

        mov dx,10h

        int 10h

        mov ah,9             ; выводим заголовок программы

        lea dx,Message1

        int 21h           

        mov ax,1             ; включаем мышиный курсор

        int 33h

        mov ax,0ch           ; создаем обработчик события на

        mov cx,12h           ; отпускание левой/правой кнопки мыши

        mov dx,offset button

        int 33h

; обработчик установлен, ждем нажатия клавиши для завершения программы

        xor ah,ah            ; ожидаем нажатия какой-нибудь клавиши   

        int 16h

        mov ax,0ch           ; отключаем обработчик события

        xor cx,cx

        int 33h

exit:

; завершение работы программы

        mov ax,4c00h

        int 21h              ; завершаем работу программы

;----------------------------------------------------------------------

; обработчик события отпускания правой/левой кнопки мыши

;----------------------------------------------------------------------

button:

        and ax,2             ; накладываем маску

        jz left              ; это левая кнопка

        mov si,4             ; заготавливаем символ для вывода

        jmp right

left:                       

        mov si,20h           ; заготавливаем пробел для вывода

right:

        shl dx,5             ; выставляем курсор в позицию,

        shr cx,3             ; возвращенную драйвером мыши

        mov dl,cl       

        mov ah,2        

        xor bh,bh   

        int 10h

        mov ax,si            ; грузим заготовленный символ

        mov ah,9             ; функция вывода