Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2011, 23:20   #1
Onni
Форумчанин
 
Аватар для Onni
 
Регистрация: 28.12.2008
Сообщений: 134
По умолчанию Ассемблер,запись в файл

Программа должна из одного файла записывать в два других. причём в первый все чётные строки,во второй все нечетные.

Код:
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.-это уже как закономерность вывела...
Кто знает где ошибка?
Onni вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как скомпилировать файл*на*Ассемблер Yagamy Liet Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 16.08.2010 14:17
ассемблер программу выводящую в файл количество блочных драйверов (assembler) valys361 Помощь студентам 2 05.06.2009 22:24
Запись в файл soonner Общие вопросы Delphi 5 21.03.2009 01:12
Запись в файл Titan123 Общие вопросы Delphi 6 23.08.2008 01:12
Запись в файл С++ Viteks Общие вопросы C/C++ 3 18.04.2008 13:18