.model small .stack 100H .data Vypis DB 'Zadaj vetu (max. 100 znakov): $' Max DB 101 Len DB 0 Buffer DB 103 Dup(?) Menu DB 'a) Vypis vetu',10,13,'b) Vypis poradove miesto 1.medzery',10,13,'c) Vypis pocet cislic',10,13,'d) Vypis kde sa nachadza dany znak',10,13,'e) Vypis retazec v obratene',10,13,'f) Koniec',10,13,'$' DajZnak DB 'Zadaj znak: $' Medzera_0 DB 'Medzera sa v retazci nenachadza !!!$' Medzera_1 DB 'Poradove cislo prvej medzery je: $' PocCislic DB 'Pocet cislic v retazci je: $' Znak_0 DB 10,13,'Dany znak sa v retazci nenachadza !!!$' Znak_1 DB 10,13,'Pocet vyskytov daneho znaku: $' Index DB 10,13,'Indexy vyskytu daneho znaku: $' Buffer2 DB 103 Dup(?) .code ClrScr PROC push ax push dx push bx mov ax, 0600h mov dx, 1850h mov bh, 07h int 10h ;zmaze obrazovku od ridok=CH stlpec=CL do praveho dolneho rohu mov ah, 02h mov dx, cx mov bh, 00h int 10h ;nastavi kurzor do laveho horneho rohu pop bx pop dx pop ax ret ClrScr ENDP Vypis_cislo PROC push ax push dx push bx mov dl, 30h cmp ax, 100 jb Mensi_ako_100 sub ax, 100 mov dl, 31h Mensi_ako_100: mov bx, ax mov ah, 02h int 21h mov ax, bx mov dl, 10 div dl mov dx, ax mov ah, 02h or dx, 3030h int 21h mov dl, dh int 21h pop bx pop dx pop ax ret Vypis_cislo ENDP Vypis_Retazec: mov ah, 09h mov dx, offset Buffer int 21h jmp Klavesa Porad_Cis_Medzery: push ax mov si, 00h mov bx, offset Buffer Dalej: mov dl,[bx][si] inc si cmp dl, '$' jz Medzera_nie sub dl, 20h jnz Dalej jmp Medzera_ano Medzera_nie: mov ah, 09h mov dx, offset Medzera_0 int 21h jmp Koniec Medzera_ano: mov ah, 09h mov dx, offset Medzera_1 int 21h mov ax, si call Vypis_cislo ;vypise cislo v DX Koniec: pop ax jmp Klavesa Pocet_Cislic: push ax mov si, 00h mov ax, 00h mov bx, offset Buffer Dalej2: mov dl,[bx][si] inc si cmp dl, '$' jz Koniec2 cmp dl, 30h jb Dalej2 cmp dl, 39h jg Dalej2 inc ax jmp Dalej2 Koniec2:mov dx, offset PocCislic mov bh, 09h xchg ax, bx int 21h xchg bx, ax call Vypis_cislo pop ax jmp Klavesa Kde_Znak: mov ah, 09h mov dx, offset DajZnak int 21h mov ah, 01 int 21h mov cl, al xor si, si xor ax, ax mov bx, offset Buffer Dalej3: mov dl,[bx][si] inc si cmp dl, '$' jz Koniec3 cmp dl, cl jnz Dalej3 mov di, ax cmp ax, 00h jnz Skok_g mov dx, offset Index mov ah, 09h int 21h Skok_g: mov ax, si call Vypis_Cislo mov si, ax mov ah, 02h mov dl, ';' int 21h mov ax, di inc ax jmp Dalej3 Koniec3:cmp ax, 00h jnz Koniec4 mov dx, offset Znak_0 mov ah, 09h int 21h jmp Klavesa Koniec4:mov dx, offset Znak_1 mov bh, 09h xchg ax, bx int 21h xchg bx, ax call Vypis_cislo jmp Klavesa Vypis_Obratene: ; mov si, offset Buffer ; mov di, offset Buffer2 xor cx, cx mov cl, [Len] cmp cx, 01 xor di, di jb Koniec5 ;bol nacitany prazdny retazec dec cx mov si, cx Skok_h: mov dl, Buffer[si] mov Buffer2[di], dl inc di cmp si, 00 jz Koniec5 dec si jmp Skok_h Koniec5:mov Buffer2[di],'$' mov ah, 09h mov dx, offset Buffer2 int 21h jmp Klavesa Start: mov ax, @data mov ds, ax ;presun segmentovej adresy do DS xor cx, cx call ClrScr ;zmaze obrazovku mov ah, 09h mov dx, offset Vypis int 21h ;zobrazenie Vypis mov dx, offset Max mov ah, 0ah int 21h ;nacita string mov bx, offset Buffer xor ax, ax mov al, [Len] add bx, ax inc bx mov bx, 10 inc bx mov bx, '$' ;vhodne ukonci nacitany retazec call ClrScr ;zmaze obrazovku mov dx, offset Menu mov ah, 09h int 21h mov cl, 80 mov ah, 02h mov dl, '-' Opakuj: int 21h dec cl jnz Opakuj Klavesa:mov ah, 07h int 21h ;daj klavesu mov cx, 0700h call ClrScr cmp al, 61h jnz Skok_a jmp Vypis_Retazec Skok_a: cmp al, 62h jnz Skok_b jmp Porad_Cis_Medzery Skok_b: cmp al, 63h jnz Skok_c jmp Pocet_Cislic Skok_c: cmp al, 64h jnz Skok_d jmp Kde_Znak Skok_d: cmp al, 65h jnz Skok_e jmp Vypis_Obratene Skok_e: cmp al, 66h jnz Klavesa mov ah, 4ch int 21H ;ukoncenie programu end Start