Всім привіт, пройшло трохи часу, всі попередні проблеми вирішив. Та тепер назріли нові.
Завдання: Розробити програму яка відслідковує появу вказаних цифр у числовому файлі. Створити файл В1 з чотирицифрових чисел шляхом введення з клавіатури, утворити файл В2 з чисел файлу В1, що мають один нуль, утворити файл В3 з чисел файлу В1, що мають дванулі і утворити файл В4 з чисел файлу В1, що мають три нулі.
Готовий код в мене є, тільки от із самим занесенням в файли В2, В3, В4 проблема. Заносить тільки перше чотирицифрове число в ці три файла, причом не звертає увагу на нулі. А повинно було би)
Коментований код:
org 100h
jmp start
b1 db 'kursach\b1.txt',0
b2 db 'kursach\b2.txt',0
b3 db 'kursach\b3.txt',0
b4 db 'kursach\b4.txt',0
k db 0 ;лічильник нулів
handle dw ?
handleb2 dw ?
handleb3 dw ?
handleb4 dw ?
bufer db 50 DUP (?)
bufer2 db 50 DUP (?)
size = $ - offset bufer
size2 = $ - offset bufer2
start:
mov ax, cs
mov dx, ax
mov es, ax
mov ah, 3ch
mov cx, 0
mov dx, offset b1 ;створення файлу В1
int 21h
mov handle, ax
;--------scan, check, write in file----------
level1:
mov ah,1
int 21h ;зчитування чисел з клавіатури
mov dl,al
cmp al,13 ;перевірка на Enter
je call write ;якщо так - тоді перехід на мітку запису в файл
mov [bufer+si], al ;запис введених даних в масив
add si, 1
jne level1
level2:
call b2proc
call b3proc ;створення 3-х файлів В
call b4proc
call read ;процедура зчитування з файлу В1
;---------------------------------------------------proc--------------
;------------write to file b1-----------
write proc
mov ah, 42h
mov bx, handle
mov al, 0
mov cx, 0
mov dx, 0
int 21h
inc k
mov ah, 40h
mov bx, handle
mov dx, offset bufer ;Процедура запису в В1
mov cx, size
int 21h
mov ah, 3eh
mov bx, handle
int 21h
write endp
;-----------create file b2, b3, b4------------
b2proc proc
mov ah, 3ch
mov cx, 0
mov dx, offset b2
int 21h
mov handleb2, ax
b2proc endp
b3proc proc
mov ah, 3ch
mov cx, 0
mov dx, offset b3 ;створення 3-х файлів В
int 21h
mov handleb3, ax
b3proc endp
b4proc proc
mov ah, 3ch
mov cx, 0
mov dx, offset b4
int 21h
mov handleb4, ax
b4proc endp
;----------read the file b1---------
read proc
MOV AH,3DH
MOV AL,0
MOV DX,OFFSET b1
INT 21H
MOV HANDLE, AX
MOV AH,3FH
MOV BX,HANDLE
MOV CX,512
MOV DX,OFFSET bufer ;читання з файлу В1
INT 21H
CMP AX,512
read endp
;----------main logic----------
compare proc ;цикл перевірки зчитаних чисел з В1 і запису в інші файли
mov cx, 50
mov si, 0
mov di, 0
input:
mov al, [bufer+si] ;заносим в регістр al si-й член масиву
cmp al, 0 ; перевіряєм на нуль
je call increment ; якщо 0 - інкрементуєм лічильник нуля
mov [bufer2+di],al ;записуєм символ в буфер 2
inc si ;інкрементуєм si
inc di ;інкрементуєм di
cmp di, 4 ;якщо di = 4 -
je call crossroads ;- викликаєм процедуру "роздоріжжя"
loop input
compare endp
;----------inc k-----------
increment proc
inc k ;процедура інкрементування нульвого лічильника
increment endp
;----------crossroads----------
crossroads proc ;"роздоріжжя"
cmp k, 1 ;якщо к=1
je call writeb2 ;викликаєм запис в файл В2
cmp k, 2 ;якщо к=2
je call writeb3 ;викликаєм запис в файл В3
cmp k, 3 ;якщо к=3
je call writeb3 ;викликаєм запис в файл В2
mov k, 0
mov di, 0 ;обнуляєм лічильники
inc si ;інкрементуєм регістр si щоб пропустити "пропуск"
;(числа в файл заносяться через "пропуск", "пробіл")
crossroads endp
;---------write to files------------
;---------b2---------
writeb2 proc ;функції запису в файли числа з буфера2
mov ah, 42h
mov bx, handleb2
mov al, 0
mov cx, 0
mov dx, 0
int 21h
inc k
mov ah, 40h
mov bx, handleb2
mov dx, offset bufer2
mov cx, size2
int 21h
mov ah, 3eh
mov bx, handleb2
int 21h
writeb2 endp
;---------b3---------
writeb3 proc
mov ah, 42h
mov bx, handleb3
mov al, 0
mov cx, 0
mov dx, 0
int 21h
inc k
mov ah, 40h
mov bx, handleb3
mov dx, offset bufer2
mov cx, size2
int 21h
mov ah, 3eh
mov bx, handleb3
int 21h
writeb3 endp
;---------b4---------
writeb4 proc
mov ah, 42h
mov bx, handleb4
mov al, 0
mov cx, 0
mov dx, 0
int 21h
inc k
mov ah, 40h
mov bx, handleb4
mov dx, offset bufer2
mov cx, size2
int 21h
mov ah, 3eh
mov bx, handleb4
int 21h
writeb4 endp
ret
Проблема в тому, що воно записує тільки перше чотирицифрове число, і у всі файл, навіть якщо я запис в ті файли не викликаю. Може хтось підкаже як оптимізувати алгоритм? Буду дуже вдячним!