Сборник по задачам и примерам Assembler



         

Запись в файл или устройство - часть 2


:prg07_09.asm - программа заполнения файла my_file.txt данными в виде строк символов.

:вводимыми с клавиатуры.

buf_Oahstruc

len_buf db 83 ;длина buf_0ah

len_in db 0 действительная длина введенного слова (без учета 0dh)

buf_in db 82 dup (20h) :буфер для ввода Сс учетом 0dh и позднее добавляем Oah)

ends

.data

handle dw 0 :дескриптор файла

filename db 'my_file.txt',0

point_fname dd filename

buf buf_0ah<>

prev_d label dword ;для сохранения длины предыдущей строки при выводе с конца файла prev dw 0

dw 0

middle dd 0 ;позиция в середине файла, при достижении которой снизу выходим :из программы

.code

:-----открываем файл-----...............................--

хогсх.сх ;атрибуты файла - обычный файл

movbx,2 ;режим доступа - доступ для чтения-записи, режим буферизации MS DOS

movdx,12h ;если файл существует, то открыть его без сохранения прежнего содержимого, :в обратном случае создать его

Ids si ,point_fname:формируем указатель на имя файла

movah.6ch ;номер функции DOS

int 21h открываем (создаем) файл

jc exit :если ошибка, то переход на конец ;действия при успешном открытии файла:

mov handle.ax ,-сохраним дескриптор файла ;—позиционируем файловый указатель с начала файла.......

mov ah.42h

хог al,al

хог ex,ex

хог dx.dx

mov bx, handle

int 21h cycl: ;вводим очередную строку с клавиатуры

lea dx.buf

mov ah,Oah

Int 21h ;для красоты ввода выводим на экран символ Oah

mov dl .Oah

mov ah.2

int 21h

emp buf.buf_in.20h;первый символ введенной строки сравниваем с пробелом

je revers ;переход на изменение ввода - добавляем Oah в конец введенной строки

lea si.buf.buf_in

mov al .buf .lenjn

cbw push si

add si ,ax

incsi учитываем неучтенный в lenjn символ 0dh

mov byte ptr [si],Oah H--......вывод в файл:..........................---........

I popdx указатель на область, откуда будем выводить строку

mov bx.handle

add ax,2 учитываем неучтенный в len_in символ 0dh

movcx.ax :длина выводимых данных

mov ah.40h

int 21h

jmp cycl

revers: ;записываем файл с конца, предварительно расширив его ;узнаем. сколько было уже записано до этого: ;для этого вначале сбрасываем буферы на диск




Содержание  Назад  Вперед