;PROGRAM NACITA POLE CISEL2, NAJDE NAJDLHSIU MNOZINU KLADNYCH CISEL, VYPISE JU, VYPISE NAJVACSIE CISLO Z TEJTO MNOZINY.

.MODEL small
.STACK 100h
.DATA
	Retazec DB 9 dup(?)
	PoleCisel DW 4 dup(?)
	PocetPrvkov EQU ($-PoleCisel)/2
	PoleCisel2 DW 48,88,45,6,85,999,0,65,111,45,10,12,14,18,25,0,-1
	PocetPrvkov2 EQU ($-PoleCisel2)/2
	Najdlhsie DW 0
	IndexZacNajdlh DW 0
	Najvacsie DW 0
	
	Ano DB 'Ano$'
	Nie DB 'Nie$'
	TextNacit DB 'Hladaj cislo z pola: $'
	TextZaciatok DB 'Zadaj cisla do pola: $'
.CODE

Read PROC
	
			push di
			push dx
			push cx
			push bx
	

	mov dx,offset Retazec; nacitanie retazca
	mov Retazec,7;max=9-2
	mov ah,0Ah;vlozenie sluzby
	int 21h;zavolanie sluzby
	mov ah,2;vlozenie sluzby
	mov dl, 0Ah;riadok dolu
	int 21h
	mov ax,0;nastvim docasny vysledok
	mov cx,10;nastavym cim budem nasobit
	mov di,2
	
	mov dl,[Retazec+2]
	cmp dl,2Dh
	jnz Konverzia
	inc di;ak je zaporne tak musim brat o cislo dalej preto inc di
Konverzia: mov dl,[Retazec+di]
			cmp dl,0Dh
			jz CiJeZaporne
			mov bl,dl;vlozim znak
			mul cx;vynasobim docasny vysledko 10
			and bl,00001111b; konvertujem bl na cislo
			mov bh,0;snulujem horny register a dostanem typ word
			add ax,bx;scitam docasny vysledko s cislom v bx
			inc di
			jmp Konverzia
CiJeZaporne:mov dl,[Retazec+2]
			cmp dl,2Dh
			jnz KoniecProcRead
			neg ax
KoniecProcRead: 
			pop bx ;vyberam registre do programu
			pop cx
			pop dx
			pop di
			
			ret
Read ENDP


Write PROC
		push si ; 
		push ax
		push bx
		push dx
		push cx

		mov si,0
		cmp ax,0
		mov cx,10
		jnl KonverziaNaDesiatkove

negacia:
		mov bx,ax
		mov ah,2
		mov dl,'-'
		int 21h
		mov ax,bx
		neg ax
			
KonverziaNaDesiatkove:
		mov dx,0
		div cx
		cmp ax,0
		jz Vypis
		push dx
		inc si
		jmp KonverziaNaDesiatkove

Vypis:	
		mov ah,2
		or dl,110000b
		int 21h
		cmp si,0
		jz KoniecProcWrite
		pop dx
		dec si
		jmp Vypis
KoniecProcWrite: 
		
		pop cx
		pop dx
		pop bx
		pop ax
		pop si
		
		ret
Write ENDP
Zac:
	mov ax,@data
	mov ds,ax
	
	mov dx, offset PoleCisel2
	mov di,0
	mov si,0
	mov cx,PocetPrvkov2
	;mov bx,0   ;doteraz najdlhsie
CitajPole:
	mov dx,[PoleCisel2+di]
	cmp dx,-1
	je Koniec1
	cmp dx,0
	je SkokNovaMnozina
	inc di
	inc di
	inc si
	loop CitajPole
SkokNovaMnozina:
	cmp si,Najdlhsie
	ja ZmenNajdlhsie
	inc di
	inc di
	mov si,0
	jmp CitajPole
ZmenNajdlhsie:
	mov Najdlhsie,si
	
	push si
	push di
	push cx
	mov cl,1
	shl si,cl
	sub di,si
	mov IndexZacNajdlh,di
	pop cx
	pop di
	pop si
	
	mov si,0
	
	inc di
	inc di
	jmp CitajPole
ZmenNajvacsie:
		cmp si,0
		je Koniec3
		mov Najvacsie,ax
		inc di
		inc di
		dec si
		jmp Kon2
Koniec1:
		mov di,IndexZacNajdlh
		mov cx,Najdlhsie
Koniec2:
		mov ax,[PoleCisel2+di]
		call write
		push ax
		push dx
		push di
		mov ah,2
		mov dl, 2Ch
		int 21h
		pop di
		pop dx
		pop ax
		
		inc di
		inc di
		loop Koniec2
kon:
		mov di,IndexZacNajdlh
		mov si,Najdlhsie
kon2:	
		cmp si,0
		je Koniec3
		mov ax,[PoleCisel2+di]
		cmp ax,Najvacsie
		ja ZmenNajvacsie
		inc di
		inc di
		dec si
		cmp si,0
		je Koniec3
		jmp kon2
Koniec3:
		mov ah,2
		mov dl, 0Ah
		int 21h
		mov ax,Najvacsie
		call write
Koniec: 
		mov ax,4C00h
		int 21h
END Zac