Помогите подкорректировать код...
Код:
model large
.stack 100h
.data
file_name db 'f.txt',0
mes1 db 'Ошибка открытия файла$'
mes2 db 'Ошибка закрытия файла$'
mes3 db '-----НАЧАЛО-----$'
mes4 db '------КОНЕЦ-------$'
mes5 db 'Найдено $'
mes6 db ' слов(о), состоящих из $'
mes7 db ' символов$'
str db '*$'
unset db 13,10,'$'
handle dw 0
buf db ?
dd dw ?
mass dw 50 dup(?)
i dw ?
.code
start:
mov ax,@data
mov ds,ax
call far ptr open_file
lea dx,mes3
mov ah,09h
int 21h
call far ptr new_line
call far ptr write_file
call far ptr new_line
lea dx,mes4
mov ah,09h
int 21h
call far ptr new_line
call far ptr work
call far ptr close_file
call far ptr output_mass
call far ptr readkey
call far ptr exit_prog
;===procedure open_file===
open_file proc far
mov al,0
lea dx,file_name
mov ah,3dh
int 21h
jc open_error
mov handle,ax
jmp open_ok
open_error:
lea dx,mes1
mov ah,09h
int 21h
call far ptr readkey
call far ptr exit_prog
open_ok:
retf
open_file endp
;===procedure write_file===
write_file proc far
mov bx,handle
xor cx,cx
xor dx,dx
mov al,0h
mov ah,42h
int 21h
out_file:
;читаем 1 байт
mov cx,1
;в память buf
lea dx,buf
mov ah,3fh
int 21h
;если EOF или ошибка чтения
cmp ax,cx
jnz close
;выводим на экран
mov dl,buf
mov ah,02h
int 21h
jmp out_file
close:
retf
write_file endp
;===procedure close_file===
close_file proc far
;дескриптор файла
mov bx,handle
mov ah,3eh
int 21h
jc close_error
jmp close_ok
close_error:
;выводим ошибку
lea dx,mes2
mov ah,09h
int 21
call far ptr readkey
call far ptr exit_prog
close_ok:
retf
close_file endp
;===procedure work===
work proc far
;обнуляем массив
xor si,si
mov cx,21
@a:
mov mass[si],0
add si,2
loop @a
;указатель на начало файла
mov bx,handle
xor cx,cx
xor dx,dx
mov al,0h
mov ah,42h
int 21h
;индекс массива
xor si,si
cycle_work:
;читаем 1 байт
mov cx,1
;в память buf
lea dx,buf
mov ah,3fh
int 21h
add si,2
;если EOF
cmp ax,cx
jnz @s
cmp buf,20h
jne l1
@s:
dec si
dec si
add mass[si],1
xor si,si
cmp ax,cx
jnz EOF
l1:
jmp cycle_work
EOF:
retf
work endp
;===procedure output_mass===
output_mass proc far
;создаём цикл, проход 20 раз
mov i,1
;индекс массива
mov si,2
cycle_output:
;выводим mes5
lea dx,mes5
mov ah,09h
int 21h
;выводим элемент массива
;колличество цифр будем хранить в cx
xor cx,cx
;копируем элемент в ax
mov ax,mass[si]
;и заносим в bx десятку
mov bx,10
lv1:
;делим число на десять
xor dx,dx
div bx
;помещаем остаток в стэк
push dx
inc cx
cmp ax,0
;повторяем пока число не станет ноль
jne lv1
;теперь вывод
xor ax,ax
mov ah,02h
lv2:
;извлекаем очередную цифру из стэка
pop dx
add dl,30h
int 21h
;повторяем столько раз, сколько насчитали цифр
loop lv2
;выводим mes6
lea dx,mes6
mov ah,09h
int 21h
;выводим i
;колличество цифр будем хранить в cx
xor cx,cx
mov ax,i
mov bx,10
lvv1:
xor dx,dx
div bx
push dx
inc cx
cmp ax,0
;повторяем пока число не станет ноль
jne lvv1
;теперь вывод
xor ax,ax
mov ah,02h
lvv2:
pop dx
add dl,30h
int 21h
loop lvv2
lea dx,mes7
mov ah,09h
int 21h
call far ptr new_line
add si,2
inc i
cmp i,21
jne cycle_output
retf
output_mass endp
;===procedure readkey===
readkey proc far
mov ah,01h
int 21h
retf
readkey endp
;===procedure exit_prog===
exit_prog proc far
mov ah,4ch
int 21h
retf
exit_prog endp
;===procedure new_line===
new_line proc far
lea dx,unset
mov ah,09h
int 21h
retf
new_line endp
end start
необходимо чтобы программа выдавала количество слов звездами....т.е. например 6 слов из 5-букв то в программме "найдено слов из 5 букв-******"