Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_лаб_КИТ_КЭМ_new.doc
Скачиваний:
6
Добавлен:
06.02.2016
Размер:
640.51 Кб
Скачать

Задание к лабораторной работе

Написать программу, реализующую последовательное выполнение нескольких операций при обращении к 25-контактному LPT-порту. Режим порта, в котором будут выполняться действия, и действия задаются по варианту.

Таблица 14 — Варианты заданий

      1. Номер варианта

Задание

нечетный № по журналу

Записать в 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

      1. Приложение б

      2. Функции для работы с 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