Интерфейсы и периферийные устройства
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
Задание 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