KARTKI, Biotechnologia, Fizyka, Labolatorium


Zestaw oprogramowania umożliwiający transmisje plików miedzy komputerami

Wykonawcy:

Piotr Knapczyk

Grzegorz Bernacki

Spis treści:

  1. Założenia................................................................. 3

2. Adnotacja do założeń.............................................. 4

3. Schemat blokowy programu: master...................... 5

4. Schemat blokowy programu: slave......................... 6

5. Format bloku transmisyjnego................................. 7

6. Spis nagłówków procedur programu master.......... 8

7. Spis nagłówków procedur programu slave............. 9

8. Spis ograniczeń programów.................................... 10

9. Instrukcja obsługi programów................................ 11

10.Wydruk programu: master.................................... 12

11.Wydruk programu: slave....................................... 15

1. Założenia.

1. Zestaw stanowią dwa niezależne nierezydentne programy: master i slave.

2. Program Slave udostępnia pliki z katalogu domyślnego z którego był

uruchomiony.

3. W programie master wpisujemy nazwę pliku, który chcemy skopiować. Slave

odpowiada czy taki plik istnieje.

4. Wszystkie atrybuty kopiowanego pliku musza być odziedziczone po pliku

kopiowanym.

5. Transmisja podzielona musi być na bloki po 512 do 4096B z testowana suma

kontrolna każdego bloku.

6. W przypadku błędu sumy kontrolnej blok należy powtórzyć. Trzecie błędne

powtórzenie tego samego bloku przerywa transmisje.

7. Brak odpowiedzi na telegram w czasie dłuższym jak 1 sekunda przerywa

transmisje.

8. Naciśniecie przycisku Esc kończy program po czasie nie dłuższym jak 2

sekundy na dowolnym etapie jego działania.

9. Transmisja ma działać jak najszybciej wykorzystując pełne możliwości

złącza (8250 lub ARCNET).

2. Adnotacje do założeń.

Mimo wielu założeń i wysokim stopniu problemów, autorom programów udało się spełnić wszystkie stawiane założenia. Programy komunikują się dzięki złączu 8250.

W każdym z programów, każdorazowe naciśnięcie klawisza Esc , kończy działanie programu (programu w którym został naciśnięty). Drugi program działa dalej oczekując na możliwość nadejścia ponownych informacji (takie udogodnienie daje możliwość sprawdzenia zasobów twardego dysku, nie wyłączając obydwu programów). O braku sygnału przychodzącego, użytkownik informowany jest natychmiastowo. Brak sygnału kończy wykonywana operacji i wraca do początku programu (daje to możliwość ponownego kopiowania, bez ponownego uruchomiania programów).

3. Schemat blokowy

programu: master.

4. Schemat blokowy

programu: master.

5. Format bloku transmisyjnego.

W obydwu programach występują dwa typy bloków transmisyjnych:

  1. standardowy

bajty zawierane informacja .

0..511 bity kopiowanego pliku

b) niestandardowy

bajty zawierane informacja .

0..(512..1023) ostatnie bity kopiowanego pliku

(512..1024) suma kontrolna wcześniejszych 512 bajtów

Typ niestandardowy używany jest do przesłania reszty bitów (wielkość pliku/512), razem z ostatnim pakietem po 512.

Istnieje jeszcze możliwość wystąpienia trzeciego rodzaju typu w momencie gdy wielkość pliku < 512

bajty zawierane informacja .

0..(0..511) ostatnie bity kopiowanego pliku

(1..512) suma kontrolna wcześniejszych 512 bajtów

6. Spis nagłówków wszystkich procedur programu master.

Nazwa procedury

Opis wykonywanej funkcji

Wejscie

Wyjscie

Wyslij

wysyłanie bajtu

al - wysyłany bajt

----------

Odbierz

odebranie bajtu

----------

al - odebrany bajt

bl - jest/brak sygnału

Wskaznik

rysowanie wskaźnika

suma - ile narysowanych

czesc - ile dodac

----------

Odbierz_pakiet

odebranie pakietu

----------

ile_p - ile powtorzen

Przesylaj

przesyłanie pakietu

----------

----------

Sprawdz_telegram

sprawdzanie telegramu

----------

----------

Wyslij_n

wysłanie nazwy i odebranie telegramu

----------

----------

Podaj

wpisanie nazwy

----------

----------

Czysc_ekran

czyszczenie ekranu

----------

----------

Exit

wyjście z programy

----------

----------

Napis

wypisanie napisu

dh - numer wiersza

cx - offset tekstu

----------

Kreska

rysowanie kreski

poz - pozycja kreski

zmienna - kolor

----------

Czyszczenie_portu

czyszczenie portu

----------

----------

Inicjacja

inicjacja portu

----------

----------

Czysc_tab

czyszczenie tablicy

di - offset tablicy

----------

Sprwadz_bufor

sprawdzenie buforu klawiatury

----------

----------

7. Spis nagłówków wszystkich procedur programu slave.

Nazwa procedury

Opis wykonywanej funkcji

Wejscie

Wyjscie

Wyslij

wysyłanie bajtu

al - wysyłany bajt

----------

Odbierz

odebranie bajtu

----------

al - odebrany bajt

bl - jest/brak sygnału

Wyslij_pakiet

odebranie pakietu

----------

ile_p - ile powtorzen

Kreska

rysowanie kreski

poz - pozycja kreski

zmienna - kolor

----------

Kopiowanie

tworzenie pakietow

----------

----------

Wyslij_odp

wysyłanie odpowiedzi

----------

----------

Sprawdzanie

sprawdzenie istnienia pliku

----------

----------

Czysc_ekran

czyszczenie ekranu

----------

----------

Czysc_tab

czyszczenie tablicy

di - offset tablicy

----------

Exit

wyjście z programy

----------

----------

Czyszczenie_portu

czyszczenie portu

----------

----------

Sprwadz_bufor

sprawdzenie buforu klawiatury

----------

----------

8. Spis ograniczeń programów.

Programy master i slave w pełni odpowiadają odgórnym założeniom. Jedynym ograniczeniem tych programów jest wielkość przesyłanych plików. Wielkość ta nie powinna przekraczać 30Mb. Niesprawność ta wynika z wielkości przesyłanego pakietu. Żeby zwiększyć ten rozmiar trzeba zmienić wielkość pakietu (zabieg ten nie opłaca się, gdyż już 30Mb pliki, na złączu 8250, będą kopiowane sporą ilość czasu).

9. Instrukcja obsługi programów.

Zarówno program master jak i slave działają w systemie MS-DOS.

Master:

Po zainicjowaniu systemu, wchodzimy do katalogu w którym znajduje się plik master.exe. Po wpisaniu master.exe i naciśnięciu klawisza Enter program zostaje uruchomiony. W początkowym menu mamy do dyspozycji dwie funkcje: nazwa i wyślij. Klawisz Tab umożliwia nam przemieszczanie między funkcjami. Użycie klawisza Esc, w każdym momencie kończy działanie programu. Do zaakceptowania funkcji służy klawisz Enter. Funkcja nazwa umożliwia nam wpisanie nazwy pliku kopiowanego. Nazwę wpisujemy wciskając kolejno klawisze z klawiatury. Użycie Backspace kasuje ostatnio wpisany znak, Esc - kończy działanie programu, a Enter - akceptuje wpisaną nazwę. Funkcja wyślij przesyła, do programu slave, wcześniej ustaloną nazwę pliku oraz odbiera przysyłane informacje. Jeżeli wystąpi brak sygnałów przychodzących użytkownik zostanie poinformowany, a program skoczy do głównego menu. W czasie kopiowania dostępy jest tylko klawisz Esc - zakańczający działanie programu. Po skopiowaniu pliku program powraca do głównego menu umożliwiając skopiowanie innego pliku. Klawisz Esc - kończy dzialanie programu.

Slave:

Po zainicjowaniu systemu, wchodzimy do katalogu w którym znajduje się plik slave.exe. Po wpisaniu slave.exe i naciśnięciu klawisza Enter program zostaje uruchomiony. Program działa w pętli, oczekując na przyjście informacji lub wciśnięcie klawisza Esc. Po przyjściu informacji z programu master, zostają odsyłane bity kopiowanego pliku. Jeżeli wystąpi zanik przesyłu informacji użytkownik zostanie poinformowany, a program skoczy do początkowej pętli. Naciśnięcie klawisza Esc, kończy działanie programu w dowolnym etapie jego wykonywania.

10. Wydruk programu: master.


fb equ 02fbh

f8 equ 02f8h

f9 equ 02f9h

fd equ 02fdh

Kod Segment

Assume cs:kod

text db ' TAB - nastepna pozycja, ENTER - akceptuj, ESC - koniec','$'

blad_z db 'Wystapil blad zapisu na dysk ','$'

wyjscie db ' ESC - rezygnacja ','$'

nzw_plk db ' Plik : ','$'

czysta db ' ','$'

funkcje db ' Nazwa Wyslij ','$'

podaj_d db ' Podaj nazwe pliku: ','$'

brak_s db ' Brak sygnalu ','$'

brak_p db ' Brak pliku ','$'

skala db ' 0% 50% 100%',10,13,' $'

no_ok db ' Wystapily problemy z kopiowaniem; sprobuj jeszcze raz','$'

ok db ' Plik skopiowany ','$'

poz db 1

zmienna db 0

uchwyt dw 0

atrybut db 0

ile dw 0

ile_p dw 0

ile_w dw 0

xoor db 0

czesc dw 0

suma dw 0

reszta dw 0

bufor db 0

tablica db 1025 dup(0)

nazwa db 14 dup(0)

odp dw 3 dup(0)

Start:

push cs

pop ds

push cs

pop es

call inicjacja

call czysc_ekran

mov dh,5

lea cx,funkcje

call napis

mov dh,23

lea cx,text

call napis

rys_kreska:

mov zmienna,7

call kreska

klawisz:

mov ah,0

int 16h

jz klawisz

push ax

mov dh,12

lea cx,czysta

call napis

pop ax

cmp al,27

je koniec

cmp al,9

je nastepny

cmp al,13

je _enter

jmp klawisz

nastepny:

mov zmienna,0

call kreska

inc poz

cmp poz,3

jb rys_kreska

mov poz,1

jmp rys_kreska

_enter:

cmp poz,1

jne nie_1

call podaj

jmp rys_kreska

nie_1:

call wyslij_n

call czyszczenie_portu

jmp rys_kreska

koniec:

call exit

;*******************************************************************

Wyslij Proc

mov dx,f8

out dx,al

mov ah,83h

mov al,0

lea bx,bufor

mov cx,0

mov dx,10000

int 15h

czekaj_wy:

mov dx,fd

in al,dx

and al,0100000b

cmp al,32

jne czekaj_wy

mov ah,83h

mov al,1

int 15h

ret

Wyslij Endp

Odbierz Proc

mov bufor,0

mov ah,83h

mov al,0

lea bx,bufor

mov cx,0fh

mov dx,0a000h

int 15h

czekaj_odb:

mov al,bufor

and al,10000000b

jz jeszcze_nie

mov ile_p,3

mov bl,0

push ax

jmp koniec_odb

jeszcze_nie:

mov dx,fd

in al,dx

and al,00000001b

jz czekaj_odb

mov dx,f8

in al,dx

mov bl,1

push ax

koniec_odb:

mov ah,83h

mov al,1

int 15h

pop ax

ret

Odbierz Endp

Wskaznik Proc

mov ah,02h

mov bh,0

mov dh,13

mov dl,18

int 10h

mov ax,suma

add ax,czesc

mov suma,ax

shr ax,8

cmp ax,0

je nie_rysuj

mov cx,ax

mov ah,0ah

mov bh,0

mov al,219

mov bl,15

int 10h

nie_rysuj:

ret

Wskaznik Endp

Odbierz_pakiet Proc

mov ile_p,0

pakiet:

inc ile_p

lea di,tablica

mov xoor,0

mov cx,ile_w

jeden: push cx

call odbierz

pop cx

cmp bl,0

je ok_p

stosb

xor xoor,al

loop jeden

call odbierz

cmp bl,0

je ok_p

push ax

call Sprwadz_bufor

pop ax

cmp xoor,al

je dobrze_odeb

mov al,'z'

call wyslij

cmp ile_p,3

je ok_p

jmp pakiet

dobrze_odeb:

mov ah,40h

mov bx,uchwyt

lea dx,tablica

mov cx,ile_w

int 21h

jb blad_zapisu

mov al,'d'

call wyslij

ok_p:

ret

blad_zapisu:

call czysc_ekran

mov dh,1

lea cx,blad_z

call napis

mov ah,4ch

int 21h

Odbierz_pakiet Endp

Przesylaj Proc

mov dh,12

lea cx,skala

call napis

mov cx,40

mov ah,0ah

mov bh,0

mov al,176

mov bl,7

int 10h

xor dx,dx

mov bx,ile

mov ax,40*256

div bx

mov czesc,ax

mov ah,3ch

lea dx,nazwa

xor cx,cx

int 21h

mov uchwyt,ax

mov al,'g'

call wyslij

mov suma,0

dec ile

cmp ile,0

je od_reszte

od_pakiet_c:

mov ile_w,512

call odbierz_pakiet

cmp ile_p,3

je zla_transmisja

call wskaznik

dec ile

jne od_pakiet_c

od_reszte:

cmp reszta,0

je zamknij_plik

mov bx,reszta

mov ile_w,bx

call odbierz_pakiet

cmp ile_p,3

je zla_transmisja

call wskaznik

mov ah,02h

mov bh,0

mov dh,13

mov dl,18

int 10h

mov cx,40

mov ah,0ah

mov bh,0

mov al,219

mov bl,7

int 10h

mov dh,12

lea cx,ok

call napis

mov dh,13

lea cx,czysta

call napis

mov ah,3eh

mov bx,uchwyt

int 21h

mov ah,43h

mov al,01

lea dx,nazwa

xor cx,cx

mov cl,atrybut

int 21h

jmp koniec_bez

zla_transmisja:

mov dh,12

lea cx,no_ok

call napis

mov dh,13

lea cx,czysta

call napis

mov ah,41h

lea dx,nazwa

int 21h

zamknij_plik:

mov ah,3eh

mov bx,uchwyt

int 21h

koniec_bez:

ret

Przesylaj Endp

Sprawdz_telegram Proc

lea di,odp

mov ax,cs:[di]

cmp ah,1000b

jne nie_ma_pliku

mov atrybut,al

mov ax,cs:[di+2]

mov ile,ax

mov ax,cs:[di+4]

mov reszta,ax

call przesylaj

jmp koniec_spr_t

nie_ma_pliku:

mov dh,12

lea cx,brak_p

call napis

koniec_spr_t:

ret

Sprawdz_telegram Endp

Wyslij_n Proc

lea si,nazwa

wys_nazwe:

lodsb

cmp al,0

je end_w_nazwy

call wyslij

jmp wys_nazwe

end_w_nazwy:

call wyslij

lea di,odp

mov cx,6

tab_szesc:

push cx

call odbierz

pop cx

cmp bl,0

je brak_sygnalu

stosb

loop tab_szesc

call sprawdz_telegram

jmp koniec_wysylania

brak_sygnalu:

mov dh,12

lea cx,brak_s

call napis

koniec_wysylania:

ret

Wyslij_n Endp

Podaj Proc

mov dh,23

lea cx,wyjscie

call napis

mov dh,10

lea cx,czysta

call napis

mov dh,10

lea cx,podaj_d

call napis

lea di,nazwa

call czysc_tab

lea bp,nazwa

mov si,1

znak:

mov ah,08h

int 21h

cmp al,13

je powrot

cmp al,8

je kasuj

cmp al,27

je exit

cmp al,0

jne dobrze

mov ah,07h

int 21h

jmp znak

dobrze:

cmp al,33

jb znak

cmp al,127

ja znak

cmp si,13

jne nie_dod

mov si,12

mov ah,02h

mov bh,0

mov dh,10

mov dl,44

int 10h

nie_dod:

mov byte ptr cs:[bp+si-1],al

inc si

mov ah,06

mov dl,al

int 21h

jmp znak

kasuj:

dec si

cmp si,0

jne nie_zero

mov si,1

jmp znak

nie_zero:

mov ah,02h

mov bh,0

mov dh,10

mov dl,32

add dx,si

int 10h

mov ah,06

mov dl,' '

int 21h

mov ah,02h

mov bh,0

mov dh,10

mov dl,32

add dx,si

int 10h

mov byte ptr cs:[bp+si-1],0

jmp znak

powrot:

mov dh,10

lea cx,nzw_plk

call napis

mov dh,23

lea cx,text

call napis

ret

Podaj Endp

Exit Proc

call czysc_ekran

mov ah,4ch

int 21h

ret

Exit Endp

Czysc_ekran Proc

mov cx,25

czysc: push cx

mov ah,02h

mov bl,0

mov dl,0

mov dh,cl

dec dh

int 10h

mov al,' '

mov ah,0ah

mov bh,0

mov bl,15

mov cx,80

int 10h

pop cx

loop czysc

ret

Czysc_ekran Endp

Napis Proc

mov ah,02h

mov bh,0

mov dl,0

int 10h

mov dx,cx

mov ah,09h

int 21h

ret

Napis Endp

Kreska Proc

mov dl,poz

dec dl

shl dl,4

add dl,16

mov ah,02h

mov bh,0

mov dh,6

int 10h

mov al,205

mov ah,09h

mov bh,0

mov bl,zmienna

mov cx,10

int 10h

ret

Kreska Endp

Czyszczenie_portu Proc

mov dx,fb

mov al,00000011b

out dx,al

mov dx,fd

in al,dx

and al,00000001b

jz nic_nie_ma

mov dx,f8

in al,dx

nic_nie_ma:

ret

Czyszczenie_portu Endp

Inicjacja Proc

mov dx,fb

mov al,10000011b

out dx,al

mov dx,f8

mov al,1

out dx,al

mov dx,f9

mov al,0

out dx,al

call czyszczenie_portu

ret

Inicjacja Endp

Czysc_tab Proc

mov ax,0

mov cx,14

rep stosb

ret

Czysc_tab Endp

Sprwadz_bufor Proc

jeszczer_raz:

mov ah,0bh

int 21h

cmp al,0ffh

jnz nie_ma_klawisza

mov ah,08h

int 21h

cmp al,27

jnz jeszczer_raz

jmp exit

nie_ma_klawisza:

ret

Sprwadz_bufor Endp

Kod Ends

End Start


11. Wydruk programu: slave.


fb equ 03fbh

f8 equ 03f8h

f9 equ 03f9h

fd equ 03fdh

kod segment

assume cs:kod

inf1 db 10,13,'Oczekiwanie na przyjscie informacji, ESC - rezygnacja',10,13,'$'

inf2 db 'Odebrany plik: ','$'

brak_p db 10,13,'Brak pliku w biezacym katalogu',10,13,'$'

copy db 10,13,'Kopiuje plik ',10,13,'$'

skala db 10,13,' 0% 50% 100%',10,13,' $'

odstep db ' ','$'

pocz db 13,'$'

no_ok db 10,13,'Wystapily problemy z kopiowaniem, sprobuj jeszcze raz',10,13,'$'

ok db 10,13,'Plik skopiowany',10,13,'$'

tablica db 1025 dup(0)

nazwa db 14 dup(0)

odp dw 3 dup(0)

wh dw 0

wl dw 0

uchwyt dw 0

reszta dw 0

ile dw 0

suma dw 0

czesc dw 0

ile_w dw 0

ile_p dw 0

ile_b dw 0

bufor db 0

start:

push cs

pop ds

push cs

pop es

call czysc_ekran

mov ah,02

mov bh,0

mov dh,0

mov dl,0

int 10h

mov dx,fb

mov al,10000011b

out dx,al

mov dx,f8

mov al,1

out dx,al

mov dx,f9

mov al,0

out dx,al

mov dx,fb

mov al,00000011b

out dx,al

inny_p:

call czyszczenie_portu

call czysc_tab

mov ah,0ch

mov al,05

int 21h

lea dx,inf1

mov ah,09h

int 21h

lea di,nazwa

Czekaj:

in al,60h

cmp al,1

jne brak_k

jmp exit

Brak_k:

mov dx,fd

in al,dx

and al,00000001b

je czekaj

mov dx,f8

in al,dx

stosb

cmp al,0

jne czekaj

mov al,'$'

stosb

lea dx,inf2

mov ah,09h

int 21h

lea dx,nazwa

mov ah,09

int 21h

call sprawdzanie

jmp inny_p

call exit

;*****************************************************************

Wyslij Proc

push bx

mov dx,f8

out dx,al

mov ah,83h

mov al,0

lea bx,bufor

mov cx,0

mov dx,10000

int 15h

czekaj_wy:

mov dx,fd

in al,dx

and al,0100000b

cmp al,32

jne czekaj_wy

mov ah,83h

mov al,1

int 15h

pop bx

ret

Wyslij Endp

Odbierz Proc

mov bufor,0

mov ah,83h

mov al,0

lea bx,bufor

mov cx,0fh

mov dx,4000h

int 15h

czekaj_odb:

mov al,bufor

and al,10000000b

jz jeszcze_nie

mov ile_p,3

mov bl,0

push ax

jmp koniec_odb

jeszcze_nie:

mov dx,fd

in al,dx

and al,00000001b

jz czekaj_odb

mov dx,f8

in al,dx

mov bl,1

push ax

koniec_odb:

mov ah,83h

mov al,1

int 15h

pop ax

ret

Odbierz Endp

Wyslij_pakiet Proc

mov ile_p,0

mov ah,3fh

mov bx,uchwyt

lea dx,tablica

mov cx,ile_w

int 21h

pakiet:

inc ile_p

lea si,tablica

mov bx,si

add bx,ile_w

mov byte ptr cs:[bx],0

mov cx,ile_w

inc cx

jeden: push cx

lodsb

xor cs:[bx],al

call wyslij

pop cx

loop jeden

call odbierz

cmp bl,0

je ok_p

push ax

call sprwadz_bufor

pop ax

cmp al,'d'

je ok_p

cmp ile_p,3

je ok_p

jmp pakiet

ok_p:

ret

Wyslij_pakiet Endp

Kreska Proc

mov ax,suma

add ax,czesc

mov suma,ax

shr ax,8

cmp ax,0

je nie_rysuj

push ax

lea dx,odstep

mov ah,9h

int 21h

pop ax

mov cx,ax

mov ah,0ah

mov bh,0

mov al,219

mov bl,15

int 10h

lea dx,pocz

mov ah,9h

int 21h

nie_rysuj:

ret

Kreska Endp

Kopiowanie Proc

lea dx,skala

mov ah,9h

int 21h

mov cx,40

mov ah,0ah

mov bh,0

mov al,176

mov bl,7

int 10h

lea dx,pocz

mov ah,9h

int 21h

mov dx,wh

mov ax,wl

mov bx,512

div bx

add dx,512

mov reszta,dx

inc ax

mov cs:[di+2],ax

mov cs:[di+4],dx

mov ile,ax

xor dx,dx

mov bx,ax

inc bx

mov ax,40*256

div bx

mov czesc,ax

call wyslij_odp

call odbierz

cmp bl,0

je zla_transmisja

mov cx,ile

dec cx

mov suma,0

cmp cx,0

je ereszta

e512: push cx

mov ax,512

mov ile_w,ax

call wyslij_pakiet

pop cx

cmp ile_p,3

je zla_transmisja

push cx

call kreska

pop cx

loop e512

ereszta:

mov ax,reszta

mov ile_w,ax

call wyslij_pakiet

cmp ile_p,3

je zla_transmisja

lea dx,odstep

mov ah,9h

int 21h

mov cx,40

mov ah,0ah

mov bh,0

mov al,219

mov bl,7

int 10h

lea dx,ok

mov ah,9h

int 21h

jmp zamknij_plik

zla_transmisja:

lea dx,no_ok

mov ah,9h

int 21h

zamknij_plik:

mov ah,3eh

mov bx,uchwyt

int 21h

ret

Kopiowanie Endp

Wyslij_odp Proc

lea si,odp

mov cx,6

wys_odp: push cx

lodsb

call wyslij

pop cx

loop wys_odp

ret

Wyslij_odp Endp

Sprawdzanie Proc

mov ah,43h

mov al,0

lea dx,nazwa

int 21h

jb nie_ma

mov ah,1000b

lea di,odp

mov cs:[di],ax

mov ah,3dh

mov al,0

lea dx,nazwa

int 21h

mov uchwyt,ax

mov bx,ax

mov ah,42h

mov al,2

mov cx,0

mov dx,0

int 21h

mov wh,dx

mov wl,ax

mov ah,42h

mov al,0

mov cx,0

mov dx,0

int 21h

call kopiowanie

jmp koniec_spr

nie_ma:

mov ax,0

lea di,odp

mov cs:[di],ax

call wyslij_odp

lea dx,brak_p

mov ah,09h

int 21h

koniec_spr:

ret

Sprawdzanie Endp

Czysc_ekran Proc

mov cx,25

czysc: push cx

mov ah,02h

mov bl,0

mov dl,0

mov dh,cl

dec dh

int 10h

mov al,' '

mov ah,0ah

mov bh,0

mov bl,15


mov cx,80

int 10h

pop cx

loop czysc

ret

Czysc_ekran Endp

Czysc_tab Proc

lea di,nazwa

mov ax,0

mov cx,14

rep stosb

ret

Czysc_tab Endp

Exit Proc

mov ah,0ch

mov al,05

int 21h

mov ah,4ch

int 21h

Exit Endp

Czyszczenie_portu Proc

mov dx,fb

mov al,00000011b

out dx,al

mov dx,fd

in al,dx

and al,00000001b

jz nic_nie_ma

mov dx,f8

in al,dx

nic_nie_ma:

ret

Czyszczenie_portu Endp

Sprwadz_bufor Proc

jeszczer_raz:

mov ah,0bh

int 21h

cmp al,0ffh

jnz nie_ma_klawisza

mov ah,08h

int 21h

cmp al,27

jnz jeszczer_raz

jmp exit

nie_ma_klawisza:

ret

Sprwadz_bufor Endp

kod ends

end start


1

16



Wyszukiwarka

Podobne podstrony:
LABORKA2, Biotechnologia, Fizyka, Labolatorium
LEPKOŚĆmm, Biotechnologia, Fizyka, Labolatorium
Fizyka - Ćw 60, Biotechnologia, Fizyka, Labolatorium
Fizyka - sprawozdanie 49, Biotechnologia, Fizyka, Labolatorium
neonówka, Biotechnologia, Fizyka, Labolatorium
Elektronika, Biotechnologia, Fizyka, Labolatorium
szeregowy rezonans napiŕciowy, Biotechnologia, Fizyka, Labolatorium
LAB110, Biotechnologia, Fizyka, Labolatorium
ĆWICZENIE NR 2A, Biotechnologia, Fizyka, Labolatorium
2a, Biotechnologia, Fizyka, Labolatorium
Fizyka - sprawozdanie 50, Biotechnologia, Fizyka, Labolatorium
Pojęcia w formacie ściągi, Biotechnologia, Fizyka, Labolatorium
drg, Biotechnologia, Fizyka, Labolatorium

więcej podobnych podstron