;zadanie 5 Michcal Mikláš TLK 5 Os:35794

ZAS    SEGMENT STACK  			;prikaz pre assembler (zaciatok zasobnikoveho segmentu)

	DW      1024 DUP(?)
	ZAS     ENDS   			;prikaz pre ukoncenie zasobnikoveho segmentu

DATA    SEGMENT   			;zaciatok datoveho segmentu

	empty db '',13,10,'$'
	VSTUP db 'VSTUP.TXT',0
	H1 DW ?
	H2 DW ?
	PR DB 100 DUP(?)
	PR1 DB 100 DUP(?)
	VYSTUP DB 'VYSTUP.TXT',0
	POCET DB 1
	SUM DB 1

DATA ENDS





CODE	SEGMENT        			; zaciatok segmentu instrukcii
assume cs:code,ss:zas, ds:data


clrscr:
	mov ax, 3h  			; sluzba VIDEO BIOSu ah,0
					; nastav Video mod c. 3
	int 10h
	ret

zasifruj: 
	mov al,byte ptr ds:[bx]  	;nacitaj znak z pola pr
	add al,8                        ;prpipocitaj konstantu
	add al,dl   			;al+dl takze kazdy znak bude mat k sebe pripocitanu konstantu v zavislosti od pozicie
	mov byte ptr ds:[bx],al  	;uloz znak na povodne miesto
	inc bx
	dec dl 				;zniz pocet znakov o 1

	cmp dl,0h   			;ak je pocet znakov 0 tak chod na vytvorenie noveho suboru
	jz vytvor

	jmp zasifruj   			;ak pocet znakov nie je 0, tak pokracuj v nacitani
	ret

Start:
	write MACRO t          		;pouzitie makra s parametrom
	mov ah,9   			;makro na vypis textu prvy, druhy, treti
	mov dx,offset t
	int 21h
	endm   				;koniec makra

	mov ax,seg data
	mov ds,ax

	call clrscr			;procedura na vymazanie obrazovky


	mov ah,3DH 			;sluzba BIOSu na otvorenie suboru
	xor al,al   			;open mode, 0 - read only
	mov dx,offset vstup   		;subor, ktory sa bude otvrat
	int 21h
	jnc pokracuj   			;ak nenastala chyba pokracuj v citani
	jmp koniec
	
pokracuj:  
	mov h1,ax  			;uloz handle suboru
	xor cx,cx  			;vynuluj cx, kvoli citaniu potrebujeme vynnulovat ch

citanie: 
	mov ah, 3FH   			;sluzba BIOSu na citanie zo suboru
	mov bx,H1  			;nacitaj handle suboru, z ktoreho chceme citat

	mov cl,100 			;pocet znakov, ktore chceme citat Ak je ax=0, tak si na konci suboru
	mov dx,offset pr  		;miesto v pamati, kam chceme citat
	int 21h

	mov pocet,al   			;uloz pocet nacitanych znakov

	mov dl,pocet 			;uloz pocet nacitanych znakov
	mov bx,offset pr 		;nacitaj si zaciatok pola, kde mas ulozene znaky
	
	call zasifruj   		;zavolaj si zasifrovanie


vytvor:  
	mov ah,3ch   			;sluzba BIOSu na vytvorenie suboru
	mov cx,0h   			;atribut pre vytvorenie 0-normal
	mov dx,offset vystup  		;nazov suboru
	int 21h

	mov h2,ax   			;handle suboru sa ulozi




zapis:  
	xor cx,cx   			;vynuluje sa cx
	mov cl,pocet   			;pocet znakov, ktore sa maju zapisat
	mov ah,40h   			;sluzba BIOSu na zapis
	mov bx,H2   			;handle suboru do ktoreho zapisat


	mov dx,offset pr  		;adresa odkial zapisat
	int 21h

	mov ah,3eh   			;sluzba BIOSu na zatvorenie suboru
	mov BX,H1   			;handle suboru, ktory chcem zatvorit
	int 21H


	mov AH,3EH   			;sluzba BIOSu na zatvorenie suboru
	mov BX,H2   			;handle suboru, ktory chcem zatvorit
	int 21H
	
koniec: 
	mov ax,4c00h         		;koniec
	int 21h

CODE ENDS
END START   				;program bude spusteny od navestia start







;1. Program bol vytvoreny v notepade pod systemom Windows XP. Skompilovany programom tasm 32 a tlink v prikazovom riadku, odkial bol nasledne aj spusteny
;2. Program nacita obsah suboru VSTUP.TXT, vytvori subor VYSTUP.TXT kde zasifruje obsah vstupneho suboru.
;3. Na nacitanie suboru VSTUP.TXT bola pouzita BIOS sluzba 3Dh, na citanie z tohto suboru bola [pouzita sluzba 3FH, na vytvorenie noveho suboru sluzba 3CH a na zapis sluzba 40H. Dalsi ich popis aj vstupne a vystupne parametre sa opisane v ng.exe
;4. Na sifrovanie som pouzil proceduru zasifruj, ktora vyberie kazdy znak z pola, kde je nacitany subor a ku kazdemu znakju pripocita konstantu 2. Samozrejme, ze sa da pouzit aj ine sifrovanie, zalezi len na tom akym sposob bude zadany priklad.
;5. Program po kzadom uspesnom kroku vypise hlasku po kazdom neuspesnom vypise chybu.
;6. Program by sa dal vylepsit o lepsie sifrovanie, tak isto by sa velmi jednoduchym sposobom dal vytvorit desifrovaci program. Potom dalsie vylepsenie by bolo, ze by uzivatel sam zadaval nazov suboru, ktory chce nacitat, ktory chce vytvorit a tak isto presnejsimi hlaskami aka chyba sa vyskytla.

