- •Методические указания и задания
- •Лабораторная работа №1
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе №1
- •Лабораторная работа №2
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе №2
- •Лабораторная работа №3
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе №3
- •Лабораторная работа №4
- •Тема: Приемы низкоуровневой работы с мышью.
- •Методические указания к лабораторной работе
- •Включение курсора мыши:
- •Выключение курсора мыши:
- •Установка драйвера событий:
- •Задание к лабораторной работе №4
- •Контрольные вопросы
- •Лабораторная работа №5
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе №5
- •Контрольные вопросы
- •Лабораторная работа № 6
- •Задание к лабораторной работе №6
- •Лабораторная работа №7
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе №7
- •Лабораторная работа №8
- •Методические указания к лабораторной работе
- •Задание к лабораторной работе
- •Приложение а
- •Приложение б
- •Функции для работы с cd проигрывателем
- •Endp _StopPlay
- •Endp _DiskInfo
- •Лабораторная работа № 1
- •Лабораторная работа № 4
- •Приемы низкоуровневой работы с мышью………………………………25
Задание к лабораторной работе
Написать программу, реализующую последовательное выполнение нескольких операций при обращении к 25-контактному LPT-порту. Режим порта, в котором будут выполняться действия, и действия задаются по варианту.
Таблица 14 — Варианты заданий
|
Задание |
нечетный № по журналу |
Записать в LPT порт данные соответствующие номеру варианта в двоичном представлении |
четный № по журналу |
Считать из LPT порта данные с тех информационных контактов, номера которых соответствуют единицам в двоичном представлении номера варианта |
Приложение а
Листинг программы
Изменить тип курсора в текстовом режиме при нажатии некоторой клавиши на клавиатуре.
.model small
data_seg segment
data_seg ends
main segment
; устанавливаем соответствие между регистрами и сегментами
assume cs:main, ds: data_seg
start:
; посылаем начальный адрес сегмента в регистр ax
mov ax, data_seg
mov ds, ax
;инициализация мыши
mov ax, 0
int 33h
;сделать указатель видимым
mov ax, 1
int 33h
escape:
mov ah, 7 ;ждать esc
int 21h ;прерывание для работы с клавиатурой
cmp al, 31h ;проверка на нажатие клавиши “1”
jne waiting
mov ax, 0ah ;задать форму курсора
mov bx,0 ;тип программный
mov cx, 0h ;маска ввода
mov dh, 0dh ;маска курсора
mov dl, 02h
int 33h
waiting:
cmp al, 27
jne escape
mov ax, 2 ;выключить курсор
int 33h
mov ax, 4c00h
int 21h ;выход
main ends
end start
Приложение б
Функции для работы с cd проигрывателем
_CheckCD PROC C FAR ;тестировать CD ROM
;возвращает в AL к-во устройств
;Если 0 - нет MSCDEX
; проверка наличия MSCDEX
push ds
push DATA
pop ds
mov ax, 1500H ;получить число устройств
xor bx,bx
int 2FH
;RETURN:
;BX - количество устройств
;CX - буква первого устройства
mov first_drive,cl
mov num_drives,bl
mov ax, 150BH ;получить число устройств
xor bx,bx
int 2FH
cmp bx,0ADADH
jne @@egog
jmp short @@exit
@@egog:
xor al,al
xor cl,cl
@@exit:
mov al,num_drives
mov cl,first_drive
pop ds
retf
ENDP _CheckCD
;---------------------------------------------------------------
_DoorOpen PROC C FAR ;открыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,0 ;открыть дверь
sendopen:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,1
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorOpen
;---------------------------------------------------------------
_DoorClose PROC C FAR ;закрыть дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,5 ; закрыть дверь
jmp sendopen
ENDP _DoorClose
_Reset PROC C FAR ;сброс
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,2 ; резет
jmp sendopen
ENDP _Reset
;---------------------------------------------------------------
_DoorLock PROC C FAR ;блокировать дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,1 ; запереть дверь
mov help1,1
sendlock:
mov [bx].rh_Len,size Ioctl_Hdr
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].rh_Code,cmIoctl_Output
mov [bx].ioctl_media,0
mov [bx].ioctl_xfer_off,offset help
push ds
pop [bx].ioctl_xfer_seg
mov [bx].ioctl_nbytes,2
mov [bx].ioctl_sector,0
mov word ptr [bx].ioctl_volid,0
mov word ptr [bx].ioctl_volid+2,0
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _DoorLock
_DoorUnlock PROC C FAR ;разблокировать дверцу
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov help,1 ; запереть дверь
mov help1,0
jmp sendlock
ENDP _DoorUnlock
;---------------------------------------------------------------
_GetLetters PROC C FAR ;получить список устройств
ARG buffoffs:word,buffseg:word
push ds es bx
push DATA
pop ds
mov es,buffseg
mov bx,buffoffs
mov ax,150dh
int 2fh
pop bx es ds bp
retf
ENDP _GetLetters
;---------------------------------------------------------------
_StartPlay PROC C FAR ;начать проигрывание
ARG dev:byte, letter:byte, start: dword, numsec:dword
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov [bx].rh_Len,size PlayReq_Hdr
mov [bx].rh_Code,cmPlay_Audio
mov ax,word ptr numsec
mov word ptr [bx].pl_Num,ax
mov ax,word ptr numsec+2
mov word ptr [bx].pl_Num+2,ax
mov ax,word ptr start
mov word ptr [bx].pl_Start,ax
mov ax,word ptr start+2
mov word ptr [bx].pl_Start+2,ax
sendplay:
mov al,dev
mov [bx].rh_Subunit,al
mov [bx].pl_Addrmd,00h
push es
push ds
pop es
mov ax,1510h
mov bx,offset tabl
xor cx,cx
mov cl,letter
int 2fh
mov ax,[bx].rh_Status
pop es
pop ds
pop bp
retf
ENDP _StartPlay
;---------------------------------------------------------------
_StopPlay PROC C FAR ;прервать проигрывание
ARG dev:byte, letter:byte
push ds
push DATA
pop ds
mov bx,offset tabl ; заполнение заголовка
mov [bx].rh_Len,size Request_Hdr
mov [bx].rh_Code,cmStop_Audio
jmp sendplay