Интерфейсы и периферийные устройства

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

 

 

Задание 7. Исследовать режим тестирования СОМ. Написать программу на ассемблере.

 

.model tiny ;модель памяти, исп. для СОМ

.code ;начало сегмента кода

org 100h ;нач. знач. счетчика - 100Н

;Начало основной программы---------------------------------------------------

start: call clear ;ярко-белые симв. на синем

;

mov cx,len1 ;

mov dh,10 ;

mov dl,27 ;

mov bp,offset mes1 ;

call symv ;вывод на экран строки симв.

;

call nklav ;идентиф. нажатой клавиши

call clsym ;стирание из буфера символа

;

call clear ;ярко-белые симв. на синем

;

mov cx,len2 ;

mov dh,10 ;

mov dl,23 ;

mov bp,offset mes2 ;

call symv ;вывод на экран строки симв.

;

mov cx,len3 ;

mov dh,12 ;

mov dl,23 ;

mov bp,offset mes3 ;

call symv ;вывод на экран строки симв.

;

nrv2: call nklav ;идентиф. нажатой клавиши

;

cmp ah,02h ;

je nrv3 ;

cmp ah,03h ;

je nrv10 ;

call clsym ;

jmp nrv2 ;

nrv10: jmp nrv6 ;

;

nrv3: call clear ;ярко-белые симв. на синем

call clsym ;стирание из буфера символа

;

mov cx,len4 ;

mov dh,0 ;

mov dl,10 ;

mov bp,offset mes4 ;

call symv ;вывод на экран строки симв.

;

mov ah,06h ;функция задания окна

mov al,0 ;режим создания

mov bh,2Fh ;атрибут символов - з/ярко-б

mov ch,1 ;верхняя Y-координата

mov cl,0 ;левая Х-координата

mov dh,24 ;нижняя Y-координата

mov dl,79 ;правая Х-координата

int 10h ;прерывание BIOS

;

mov ah,02

mov bh,0

mov dh,1

mov dl,0

int 10h

;

mov ah,3Fh

mov bx,0

mov cx,100

mov dx,offset buf1

int 21h

;Инициалицация СОМ1

initcom1proc

movax,40h

moves,ax

movdx,es:[0]

adddx,3

moval,10000000b

outdx,al

decdx

decdx

moval,0

outdx,al

decdx

moval,0C0h

outdx,al

ret

initcom1endp

;Инициализация регистра контроля линии

initrgproc

adddx,3

moval,00000000b

oral,00000011b

oral,00000000b

oral,00000000b

outdx,al

incdx

moval,10h

outdx,al

subdx,3

moval,0

outdx,al

ret

initrgendp

;Готовность СОМ1

checkproc

try:movdx,es:[0]

adddx,5

inal,dx

testal,1Eh

jzm0

leadx,error

mov cx,len5

mov dh,10

mov dl,23

mov bp,offset mes5

call symv ;вывод на экран строки симв.

jmpexit

m03:testal,01h

jnzm4

testal,20h

jztry

ret

checkendp

;Работа с портом

workproc

m4:movah,0

int16h

pushax

pushax

movdx,es:[0]

adddx,5

movcx,10

m1:inal,dx

testal,20h

jzm2

loopm1

m2:subdx,5

popax

outdx,al

adddx,5

m3:inal,dx

testal,1

jzm3

subdx,5

inal,dx

movah,0Eh

int10h

popax

cmpal,1Bh

jnem4

ret

workendp

;Выход из программы

exit:movax,4C00h

int21h

nrv6: call clsym

ret

;ПП Экран: ярко-белые символы на синем фоне.---------------------------------

clear: mov ah,06h ;функция задания окна

mov al,0 ;режим создания

mov bh,1Fh ;атрибут символов - c/ярко-б

mov ch,0 ;верхняя Y-координата

mov cl,0 ;левая Х-координата

mov dh,24 ;нижняя Y-координата

mov dl,79 ;правая Х-координата

int 10h ;прерывание BIOS

ret

;ПП. Вывод на экран строки символов.-----------------------------------------

symv: mov ah,13h

mov al,0

mov bh,0

mov bl,1Fh

push ds

pop es

int 10h

ret

;ПП. Идентификация нажатой клавиши.------------------------------------------

nklav: lahf

or ah,01000000b

sahf

nrv1: mov ah,11h

int 16h

jz nrv1

ret

;ПП. Стирание из буфера символа.---------------------------------------------

clsym: mov ax,0C00h

int 21h

ret

;ПП. Задержка----------------------------------------------------------------

delay: mov ah,86h

mov cx,0

int 15h

ret

;

;ДАННЫЕ.---------------------------------------------------------------------

mes1 db ПРОГРАММА - "COM"

len1=$-mes1

mes2 db 1. Передача данных в СОМ-порт.

len2=$-mes2

mes3 db 2. Выход из программы.

len3=$-mes3

mes4 db Наберите выводимый в СОМ-порт текст с помощью клавиатуры.

len4=$-mes4

buf1 db 100 dup(*)

mes5 dbОшибка порта СОМ 1,7,0Dh,0Ah,S

len5=$-mes5

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

end start