Программа должна из одного файла записывать в два других. причём в первый все чётные строки,во второй все нечетные.
Код:
model small
.data
viv1 DB 0dh,'Input path, please:', 0ah, 0dh ,'$'
viv2 DB 0ah, 0dh,'Such file does not exist.', 0ah, 0dh ,'$'
viv3 DB 0ah, 0dh,'The file was opened. Text was got succesfuly.', 0ah, 0dh ,'$'
viv4 DB 'More? Press <y>', 0ah, 0dh ,'$'
viv5 DB 0ah, 0dh,'Troubles with reading', 0ah, 0dh ,'$'
viv6 DB 0ah, 0dh,'ERROR. Can not make new file.', 0ah, 0dh ,'$'
path DB 64, ?, 65 DUP('0')
chet DB 'D:\ASM\chet.txt', 0
nechet DB 'D:\ASM\nechet.txt', 0
sth DB 512 DUP(' '), '$'
sth_4 DB 256 DUP(' '), '$'
sth_n4 DB 256 DUP(' '), '$'
.stack[1024]
.code
_start: mov ax, @data
mov ds, ax
mov es, ax
;mov ax, @stack
;mov ss, ax
_start1:cld
mov ah, 09h ;предложение путь
lea dx, viv1
int 21h
mov ah, 0Ah ;ввод пути
lea dx, path
int 21h
mov ax,0 ;завершает введённый с клавиатуры путь нулём
mov al,path[1]
add al, 2
mov si, ax
mov path[si],0
mov cx, 0
mov ah, 3dh ;открывается файл с текстом
mov al, 2
lea dx, path[2]
int 21h
jc _mt1 ;(не открылся)
mov bx, ax ;текст считывается в буфер sth
mov ah, 3fh
mov cx, 512
lea dx, sth
int 21h
jc _mt2 ;(не считался)
mov ah, 09h ;сообщение о удачном открытии файла и считывании в буфер
lea dx, viv3
int 21h
jmp _mt0
_mt2: mov cx, ax ;(не читается)
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
add cx, 30h
mov dx, cx
int 21h
mov ah, 09h
lea dx, viv5
int 21h
jmp _fin
_mt1: mov cx, ax ;(не может найти главный файл)
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
add cx, 30h
mov dx, cx
int 21h
mov ah, 09h
lea dx, viv2
int 21h
jmp _fin
;копирует из главного буфера чётные и нечётные строки в побочные
_mt0: mov si, 0
mov ax, 0
mov dx, 0
jmp _mt4
;работа с буфером чётных строк
_mt3: mov sth_n4[di], 0ah ;запись 0ah в старый буфер перед тем как перейти к новому
inc si
inc di
mov dx, di
_mt4: cmp si, 512 ;это конец буфера?
jge _mt8
cmp sth[si], 0ah ;это конец строки?
je _mt5
mov di, ax
mov bl, sth[si]
mov sth_4[di], bl
inc si
inc di
mov ax, di
jmp _mt4
;работа с буфером НЕчётных строк
_mt5: mov sth_4[di], 0ah ;запись 0ah в старый буфер перед тем как перейти к новому
inc si
inc di
mov ax, di
_mt7: cmp si, 512 ;это конец буфера?
jge _mt8
cmp sth[si], 0ah ;это конец строки?
je _mt3
mov di, dx
mov bl, sth[si]
mov sth_n4[di], bl
inc si
inc di
mov dx, di
jmp _mt7
_mt8: mov ah, 3ch ;создание файла для записи чётных строк
lea dx, chet
mov cx, 0
int 21h
jc _mt6 ;(не создался)
mov bx, ax ;запись в файл для чётных строк
mov ah, 40h
mov cx, 256
lea dx, sth_4
int 21h
jc _mt6
mov ah, 3ch ;создание файла для записи НЕчётных строк
lea dx, nechet
mov cx, 0
int 21h
jc _mt6 ;(не создался)
mov bx, ax ;запись в файл для НЕчётных строк
mov ah, 40h
mov cx, 256
lea dx, sth_n4
int 21h
jc _mt6
jmp _fin
_mt6: mov cx, ax ;(ошибка при создании файла)
mov ah, 02h
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
add cx, 30h
mov dx, cx
int 21h
mov ah, 09h
lea dx, viv6
int 21h
_fin: mov ah, 09h ;ещё?
lea dx, viv4
int 21h
mov ah, 01h ;читает символ
int 21h
cmp al, 'y'
je _why
jmp _allfin
_why: mov cx, 50 ;очистка памяти поля пути
mov si, 1
_wow: mov path[si], '0'
inc si
loop _wow
jmp _start1
_allfin:mov ah,4ch
int 21h
end _start
Проблема в следующем: периодически она работает правильно, но бывает когда программа ни в какую не хочет записывать в файл Nechet.Особенно ей не нравиться когда запись идет из файл под именем data.txt.-это уже как закономерность вывела...