ZAS     SEGMENT STACK           ;direktiva pre assembler - zaciatok
                                ;zasobnikoveho segmentu
        DW      64 DUP(?)       ;definicia 64-och slov
ZAS     ENDS                    ;koniec zasobnikoveho segmentu
;----------------------------------------------------------------------------
DATA    SEGMENT                 ;zaciatok datoveho segmentu
menu    DB      10,10,13,'MOLNAR TOMAS 2.rocnik ZS 2001/2002',10,13,'prve  zadanie',10,10,13,'1. Hlada v retazci pocet vyskitov zadaneho znaku',10,13,'2. Vypise pocet slov zadaneho retazca',10,13,'3. Najde znak s minimalnou hodnotou a vypise jeho posledny vyskit',10,13,'4. Vypise povodne nacitany retazec v obratenom poradi',10,13,'5. Vypise povodny retazec ',10,13,'6. Znova nacita retazec'10,13,'7. Ukonci vykonavanie programu',10,10,13,'$'
zadz	db	10,10,13,'Zadajte znak ktory chcete vyhladat',10,13,'$'
zadr	db	10,10,13,'Zadajte retazec (max 100 znakov)',10,13,'$'
nevysk  db	10,10,13,'Zadany znak sa v retazci nevyskytuje$'
vysk	db	10,10,13,'Pocet vyskitov zadaneho znaku v retazci a jeho posledny vyskit :$'
rpslov	db	10,10,13,'Pocet slov je : $'
rminz   db	10,10,13,'Minimalny znak : $'
VSTUP	DB 99
POCET	DB 0
RETAZ	DB 80 DUP(?) 
DATA    ENDS                    ;koniec segmentu
;----------------------------------------------------------------------------
CODE    SEGMENT                 ;zaciatok kodoveho segmentu
        ASSUME  CS:CODE, DS:DATA, SS:ZAS        ;direktiva - oznamuje
                                ;assembleru aktivne segmenty
START:  MOV AX, SEG DATA        ;do AX vloz segmentovu cast adresy
        MOV DS, AX              ;seg. cast adresy presun do DS
        MOV DX, OFFSET zadr     ;do DX vloz posunutie retazca v dat. segmente
        MOV AH, 09H             ;funkcia vypis retazca (write string)
        INT 21H
nacit:	MOV DX,OFFSET VSTUP  ; v DS:DX ocakava DOS sluzba zaciatok bufra
	MOV AH,0aH           ; sluzba Dos pre bufrove nacitanie retazca
	INT 21H	             ; Dos-ske prerusenie
st2:	MOV DX, OFFSET menu     ;do DX vloz posunutie retazca v dat. segmente
        MOV AH, 09H             ;funkcia vypis retazca (write string)
        INT 21H
ov:	mov ah,8 		;ziadost o nacitanie znaku
	int 21h			;vstup z klavesnice
	cmp al,'1'
	jnz m2
	jmp hladzna
m2:     cmp al,'2'
	jnz m3
	jmp pocslov
m3:	cmp al,'3'
	jnz m4
	jmp minznak
m4:	cmp al,'4'
	jnz m5
	jmp obrat	
m5:	cmp al,'5'		
	jnz m6	
	jmp povodny 
m6:	cmp al,'6'		
	jnz m7	
	jmp nacit
m7:	cmp al,'7'		
	jnz ov	
	jmp koniec 





;-----------------------------------------------------------
hladzna:MOV DX, OFFSET zadz
	MOV AH, 09H
	INT 21H
	mov ah,1
	int 21h
	mov si,offset retaz
	mov cx,1
	
h2:	cmp al,[si]
	jz  h1
	inc si
	inc cx
	cmp cl,pocet
	jbe h2	
h1:	
	cmp cl,pocet
	jbe h3
	MOV DX, OFFSET nevysk
	MOV AH, 09H
	INT 21H
	jmp start
h3:	cmp al,pocet
	mov ax,bx
	MOV DX, OFFSET vysk
	call cislo
	jmp st2
;-----------------------------------------------------------	
pocslov:
	mov cx,1
	mov bx,0
	mov si,offset retaz
p2:	cmp byte ptr[si],' '
	jnz p1
	inc si
	inc cx
	cmp cl,pocet
	jbe p2
	jmp p3 ;ak je koniec ret
p1:     inc bx
p5:	cmp byte ptr[si],' '
	jz p4
	inc si
	inc cx
	cmp cl,pocet
	jbe p5
	jmp p3 ;ak koniec ret
p4:	inc si
	inc cx
	jmp p2
p3:	mov ax,bx
	MOV DX, OFFSET rpslov
	call cislo
	jmp st2
;-----------------------------------------------------------
minznak:mov cx,1
	mov bl,256
	mov si, offset retaz
min4:	cmp bl,[si]
	jbe min3
	mov bl,[si]
min3:	inc si
	inc cx
	cmp cl,pocet
	jbe min4
	mov dx,offset rminz
	mov ah,9
	int 21h
	mov dl,bl
	mov ah,2
	int 21h
	jmp st2
;-----------------------------------------------------------
obrat:	xor cx,cx
	mov cl,pocet
	mov si,offset retaz
	add si,cx
	dec si
o1:	mov dl,[si]
	mov ah,2
	int 21h
	dec si
	loopnz o1
	jmp st2
;-----------------------------------------------------------
povodny: mov si,offset retaz
o1:	mov dl,[si]
	mov ah,2
	int 21h
	inc si
	loopnz o1
	jmp st2
;-----------------------------------------------------------	
koniec: MOV AX, 4C00H           ;funkcia ukoncenie programu
        INT 21H
cislo:	mov cl,10
	div cl
	add al,48
	add ah,48
	push ax
	MOV AH, 09H
	INT 21H
	pop ax
	push ax
	mov dl,al
	mov ah,2
	int 21h
	pop ax
	mov dl,ah
	mov ah,2
	int 21h
	ret
CODE    ENDS                    ;koniec kodoveho segmentu
        END     START           ;koniec suboru - pre assembler


;PREKLAD:        [cesta]\tasm /l/zi/c subor.asm
;LINKOVANIE:     [cesta]\tlink /l/i/v subor.obj
;POMOCNE PROGRAMY:    j:\thelp\help.exe, abshelp.exe
                     j:\tasm\thelp.com
                     j:\ng\ng.exe   

;!!!pozrite si vyznam prepinacov pri preklade a spajani(spustite iba tasm alebo tlink)!!!