Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: [решено] Запись в файл
Показать сообщение отдельно

Старожил


Сообщения: 208
Благодарности: 5

Профиль | Отправить PM | Цитировать


Вот готовый рабочий код программы:
Программа просит ввести строку. Строка - слова разделённые 1 или несколькими пробелами, удалить лишние пробелы (вначале строки, в конце строки, 1 пробел между словами)
Результат вывести на экран и записать в файл (файл создаётся в процессе). Запись в файл организовать в процедуре.

Код: Выделить весь код
	.MODEL small			;отводим под стек и под данные по 64Кб
	.STACK 100h				;отмечаем начало сегмента стека
	.386
	.DATA					;отмечаем начало сегмента данных
	NL		db		0Ah, 0Dh, '$'
        Buf		DB		255, 0, 256 DUP (0)     ;
	hFile	db	300	        dup(?)
	Filename	db		'file.txt',0
	.CODE				;отмечаем начало сегмента кодов
	main PROC
		mov		ax,@data		;копируем адрес
		mov		ds,ax		;сегмента данных
	
		mov dx, offset Buf
		mov ah, 0Ah
		int 21h				;запрашиваем строку
 
		mov dx, offset NL
		mov ah, 9h
		int 21h				;переводим строку на экране, выводя CRLF
 
		xor cx, cx 
		mov cl, [Buf+1]
		test cl, cl
		jz Exit				;проверяем длину строки - если пустая, то выходим
	
		add bx, offset Buf+1
		add bl, cl
		mov	si, bx
last:
		mov		dl,[si]
		cmp		dl,' '
		jne		tmp
		dec		si
		dec		cx
		jmp		last
		
		
tmp:	mov si, offset Buf+2
 
first:	mov		dl,[si]
		cmp		dl,' '
		jne		Cycle
		inc		si
		dec		cx
		jmp		first
 
		
Cycle:		lea di, hFile
		mov bx,0
 
Cycle1:		mov dl, [si]			;берём очередной байт
		cmp dl, ' '			;сравниваем с пробелом
		jne	Print
		cmp 	dx,'  '			;а если пробел - то предыдущий был пробел или нет?
       		je    NextChar		;если два пробела подряд - не печатаем
		
Print:
		mov	[di], dl
		inc	di
		mov     ah,02h		;выбор функции 2
		int     21h			;вызов DOS
		inc 	bx
				
NextChar:
		mov 	dh,dl		;сохранить текущий символ для теста на следующем витке
        	inc 	si			;перейти к следующему символу
		
		loop	Cycle1 
 		
		push 	bx
 
		mov ah, 3Ch			;если же добрались до конца - будем сохранять.
		mov dx, offset Filename
		xor cx, cx
		int 21h				;создаём файл
 
		pop	si		
 
		push	offset	hFile
		call	vivod
 
		mov ah, 3eh
		int 21h				;закрываем файл
 
Exit:
		mov ax, 4c00h
		int 21h				;выходим из программы
 
    main    ENDP
 
    vivod	proc
    mov bx, ax
    mov ah, 40h
    mov cx, si
    mov bp, sp
    add bp, 2
    mov dx, [bp]
    int 21h
    ret
    vivod	endp
    END main
Может кому пригодится ))

Отправлено: 09:15, 24-11-2010 | #8

Название темы: [решено] Запись в файл