Zdravim, takze mojou ulohou bolo nacitat retazec zo suboru vypisat ho a najst pocet slov. Mam uz vsetko az na ten pocet slov. To by som chcel realizovat tak, ze poctu by som na zaciatku priradil jednotku a inkrementoval ked by som dosiel na medzeru(medzier je o jednu menej ako pocet slov). Davam moj zdrojak. Prosim pomozte.
Kód:
.model small
.stack 50h
.data
pocet db 31h
znak db 100 dup(?) ;tu sa bude ukladat "zadavany retazec"
file_name_in db 'input.txt','$' ;meno vstupneho suboru
file_handle_in dw 0 ;handler pre vstupny subor
otvor_vstup db 'Vstupny subor bol otvoreny',10,13,'$'
zatvor_vstup db 10,13,'Vstupny subor bol zatvoreny',10,13,'$'
CHYBA1 db 'Chyba otvarania vstupneho suboru',10,13,'$'
CHYBA2 db 'Chyba zatvarania vstupneho suboru',10,13,'$'
OK db 'Subor nacitany. Jeho obsah:',10,13,'$'
.code
org 100h
;-------------------- Macro na vypis retazca -------------------------------------
vypis MACRO str
mov ah,09h
mov dx,offset str
int 21h
ENDM
;--------------------------------------------------------------------------------------
START: MOV AH, 0Fh ;vymazanie
INT 10h ;
MOV AH, 00h ;
INT 10h ;obrazovky
mov ax,@data
mov ds,ax
mov ah,3dh ; otvor subor
mov al,0 ; na citanie
mov dx,offset file_name_in ; je to subor input.txt
int 21h
mov dx,offset znak ; bude sa ukladat do pameti
mov cx,1 ; po jednom znaku
mov bx,ax ; do bx daj handler otvoreneho suboru
jne citaj
vypis CHYBA1 ; vypisanie chyboveho hlasenia
jmp koniec3
citaj: mov ah,3fh ; citaj subor
int 21h
inc dx ; priprav adresu pre ulozenie dalsieho
; znaku do pameti 'precitane'
cmp bx,32
inc pocet
cmp ax,0 ; bol EOF?
jne citaj ; ak nie, citaj dalsi znak zo suboru
uspesne: vypis otvor_vstup
vypis OK
vypis znak
vypis pocet
koniec2: vypis zatvor_vstup ;zatvaranie vystupneho suboru
mov ah, 3eh
int 21h
koniec3: mov ax, 4c00h
int 21h
END START