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
· СХ = 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 ; функция вывода
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.