dx,379h
in al,dx ; dochekatysja ACK1 down
test al,40h
jz ack1down
call test_timeout ; perevirka timeout
cmp ah,09h
jne m3
jmp fin
m3: call test_esc ; perevirka Esc
cmp ah,09h
jne m4
jmp fin
m4:
jmp ack1up
ack1down:
jmp receive_loop
;;;; TRANSMITION ;;;;
transmit:
xor al,al
mov dx,378h
out dx,al ; skynuty ACK1
mov ah,3dh ; open file
mov dx,fn_offset
mov al,0 ; open for read
int 21h
jnc no_open_error
mov dx,offset open_error_mess
mov ah,09h
jmp fin
no_open_error:
mov handle,ax ; zberegty handle
mov dx,offset transmit_mess
mov ah,09h
int 21h
mov dx,fn_offset
int 21h
transmit_loop:
xor al,al
mov dx,378h
out dx,al ; skynuty ACK1
mov ah,00h
int 1ah
mov tick,dx
ack2up:
mov dx,379h
in al,dx
test al,40h
jz ack2down
call test_timeout ; perevirka timeout
cmp ah,09h
je fin
call test_esc ; perevirka Esc
cmp ah,09h
je fin
jmp ack2up
ack2down:
not hi
cmp hi,0
jz no_read_error
mov ah,3fh ; read from file
mov bx,handle
mov dx,offset buf
mov cx,1
int 21h
jnc test_ax
mov dx,offset read_error_mess
jmp fin
test_ax:
cmp ax,0
jnz no_read_error
mov dx,offset end_transmit_mess
jmp fin
no_read_error:
mov bl,buf
cmp hi,0
jz t_low_byte
shr bl,4 ; starshi piv baita v bl
t_low_byte:
and bl,00001111b
transm_cont:
mov al,bl ; zapysaty danni v port 378h
shl al,1
and al,00010000b
or al,bl
and al,00010111b
mov dx,378h
out dx,al
or al,08h ; vystavyty ACK1
out dx,al
mov ah,0
int 1ah
mov tick,dx
;;;;;;;; dochekatysja pidtverdgennja pryjomu ACK2
ack2off:
mov dx,379h
in al,dx
test al,40h
jnz ack2on
call test_timeout
cmp ah,09h
je fin
call test_esc
cmp ah,09h
je fin
test al,40h
jmp ack2off
ack2on:
jmp transmit_loop
fin:
mov ah,09h
int 21h ; druk povidomlennja
mov ah,3eh ; zakryty file
mov bx,handle
int 21h
mov ax,4c00h ; exit
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;
;; perevirka Timeout ;;
;;;;;;;;;;;;;;;;;;;;;;;;
test_timeout proc
mov ah,00 ; get clock ticks
int 1ah
sub dx,tick
cmp dx,182
jl ret_to
mov ah,09h ; vydaty povidomlennja
mov dx,offset timeout_mess
ret_to: ret
test_timeout endp
;;;;;;;;;;;;;;;;;;;;
;; perevirka ESC ;;
;;;;;;;;;;;;;;;;;;;;
test_esc proc
mov ah,06 ; test Esc
mov dl,0ffh
int 21h
jz ret_esc
cmp al,27 ; ESC ?
jne ret_esc
mov ah,09h ; vydaty povidomlennja
mov dx,offset esc_mess
ret_esc:
ret
test_esc endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; oblast danyh rezydenta ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
fn_offset dw 0 ; file name offset
handle dw 0 ; file handle
serv db 0
hi db 0
buf db 0
tick dw 0
sys_line_err db 0dh,0ah,'Incorrect parametres in command line!'
db 0dh,0ah,'Must be:',0dh,0ah,'kurs09.com [s] filename'
db 0dh,0ah,0dh,0ah,'s - send file (optionaly)'
db 0dh,0ah,'filename - file to send/recieve',0dh,0ah,'$'
esc_mess db 0dh,0ah,'Terminated by User',0dh,0ah,'$'
timeout_mess db 0dh,0ah,'Terminated by Timeout',0dh,0ah,'$'
receive_mess db 0dh,0ah,'Recieving file $'
transmit_mess db 0dh,0ah,'Transmiting file $'
open_error_mess db 0dh,0ah,'File open error',0dh,0ah,'$'
read_error_mess db 0dh,0ah,'File read error',0dh,0ah,'$'
end_transmit_mess db 0dh,0ah,'End of transmition',0dh,0ah,'$'
end start
ВИСНОВКИ
В результаті виконання завдання курсового проектування на мові Assembler розроблено програму роботи з паралельним портом, яка дозволяє передати та прийняти через LPT1: текстовий файл (назва файлу та напрям руху даних вказуються в командному як параметри при запуску програми).
Література
Основна:
1. Зубков С.В. Assembler для DOS, Windows и UNIX – 3-е изд., стер. – М.: ДМК Пресс; СПб.: Питер, 2004. – 608с.
2. Костельцев А.В. Построение интерпретаторов и компиляторов. – СПб: Наука и техника, 2001. – 224 с.
3. Системное программное обеспечение. Учебник для вузов/ А.Ю. Молчанов. - СПб: Питер, 2003. – 396 с.
4. А.В.Фролов, Г.В.Фролов. MS-DOS для програмиста №18,19. – М.: Диалог-МИФИ, 1995. – 254 с.
5. Т.Пратт. Языки программирования. Разработка и реализация. – М.: Мир, 1979.
6. Гук М. Дисковая подсистема ПК. - СПб.: Питер, 2001. – 336с.: ил.
Додаткова:
1. Бек Л. Введение в системное программное обеспечение. – М.: Мир, 1989.
2. Ф.Льюис, Д.Розенкрац, Р.Стирнз. Теоретические основы проектирования компиляторов. – М.: Мир, 1979.
3. Т.Пратт. Языки программирования. Разработка и реализация. – М.: Мир, 1979.