Информация


Programm.ws - это сайт, на котором вы можете почитать литературу по языкам программирования, а так-же посмотреть примеры работающих программ на С++, ассемблере, паскале и много другого..

Программирование — в обычном понимании, это процесс создания компьютерных программ.
В узком смысле (так называемое кодирование) под программированием понимается написание инструкций — программ — на конкретном языке программирования (часто по уже имеющемуся алгоритму — плану, методу решения поставленной задачи). Соответственно, люди, которые этим занимаются, называются программистами (на профессиональном жаргоне — кодерами), а те, кто разрабатывает алгоритмы — алгоритмистами, специалистами предметной области, математиками.
В более широком смысле под программированием понимают весь спектр деятельности, связанный с созданием и поддержанием в рабочем состоянии программ — программного обеспечения ЭВМ. Более точен современный термин — «программная инженерия» (также иначе «инженерия ПО»). Сюда входят анализ и постановка задачи, проектирование программы, построение алгоритмов, разработка структур данных, написание текстов программ, отладка и тестирование программы (испытания программы), документирование, настройка (конфигурирование), доработка и сопровождение.

Глава 7. Работа с файлами в программах на ассемблере

Создание, открытие, закрытие файла

Прежде чем использовать файл в программе, его необходимо открыть с помощью функции 3dh прерывания 21h. Если файл не существует, то перед открытием
его нужно создать. Оба эти действия выполняются одной из следующих функций: 3ch, 5bh, 5ah, 6ch.

Создание файла с усечением существующего до нулевой длины

Вход: АН = 3Ch; CX = атрибуты файла (значения битов: 0=1 — только чтение; 1= 1 — скрытый файл; 2=1 — системный файл; 3=0 — игнорируется; 4=0 — зарезервирован (каталог), должен быть равен 0; 5 — бит архивации; 6= 0 — резерв; 7=1 — общий файл в системе Novell Netware; 8...15=0 — резерв); DS:DX — ASCIZ-имя файла.
Выход: CF=O — АХ = дескриптор файла; CF=1 — АХ = код ошибки (3 — нет такого пути; 4 — нет свободного дескриптора файла; 5 — доступ отказан).

хогсх.сх :атрибуты файла - обычный файл Ids dx,point_fname:
формируем указатель на имя файла movah.5bh :номер функции DOS
int21h открываем файл
jnc ml : обойдем открытие файла
moval,02h ;режим доступа
movah.3dh ;номер функции DOS
int 21h : открываем файл
jc exit :переход, в случае ошибки
mi: :действия при успешном открытии файла:
mov handle.ax :сохраним дескриптор файла

Открытие или создание файла с расширенными возможностями

Функция 6Ch появилась в последних версиях MS DOS (DOS 4.0+). С ее появлением устраняется необходимость отслеживать существование создаваемого файла. Для корректной работы достаточно задать нужные значения в соответствующих регистрах. Анализ возможных значений показывает, что данная функция фактически заменяет существовавшие до этого функции создания и открытия файлов.
Вход: АХ = 6C00h; BL = флаги — режим открытия (значения битов: 7 — наследование; 4-6 — режим разделения; 3=0 — резерв; 0-2 — режим доступа); ВН = флаги (значения битов: 6=0 — использовать стандартную для MS DOS буферизацию; 6=1 — отменить стандартную для MS DOS буферизацию; 5=0 — использовать обычный обработчик ошибок (int 24h); 5=1 — не использовать обычный обработчик ошибок (int 24h), для выяснения причины ошибки использовать функцию 59h int 21h); CX = атрибуты создаваемого (и только) файла; DL = действия, если файл существует или не существует (значения бит: 0-3 — действие, если файл существует (0000 — вернуть ошибку; 0001 — открыть файл; 0002 — открыть файл без сохранения существующего); 4-7 — действие, если файл не существует (0000 — вернуть ошибку; 0001 — открыть файл; 0002 — создать и открыть файл); DH = 00h — резерв; DS:SI — адрес строки с ASCIZ-именем файла.
Выход: CF = 0 — успешное выполнение функции: АХ = дескриптор файла, СХ = состояние (0 — файл открыт; 1 — файл создан и открыт; 2 — файл открыт без сохранения содержимого существующего файла); CF = 1 — АХ = код ошибки.
Следующий фрагмент программы показывает вариант применения функции 6Ch.

:prg07_04.asm - программа демонстрации открытия или создания файла :с расширенными возможностями в текущем каталоге функцией 6Сп.
.data
handle dw 0 :дескриптор файла
filename db 'my_file.txt'.0
point_fname dd filename
.code
хогсх.сх атрибуты файла - обычный файл
movbx.2 :режим доступа обычный - доступ для чтения-записи
movdx.l :если файл существует, то открыть его. в обратной случае вернуть ошибку
(для эксперимента)
Ids si .point_fname-.формируем указатель на имя файла movah.6ch :номер функции DOS int 21h открываем файл jnc ml ;если файл существовал, то переход movdx.lOh -.открыть файл movah.6ch :номер функции DOS int 21h :открываем файл jc exit -.переход в случае ошибки ml: :действия при успешном открытии файла: mov handle.ах :сохраним дескриптор файла

Закрытие файла

В конце работы с файлом его нужно закрыть. Но это действие не является обязательным, так как функция 4сп, которая завершает выполнение программы, в числе прочих действий выполняет и закрытие всех файлов. Вход: АН = 3Eh; BX = дескриптор файла, полученный при его открытии. Выход: CF = 0 — АХ = не определен; CF = 1 — АХ = код ошибки: 6 — недопустимый
дескриптор.
Во время закрытия файла выполняются все незаконченные операции записи на диск в элементе каталога, соответствующего файлу, модифицируются различные поля, в том числе поля времени и даты устанавливаются в текущее время.

;prg07_05.asm - программа демонстрации закрытия файла функцией 3Eh.

:.........
.data
handle dw 0 :дескриптор файла filename db 'my_file.txt',О point fname dd filename
;......:
.code :*......
хогсх.сх :атрибуты файла - обычный файл
Ids dx.point_fnanve :фориируем указатель на имя файла
movah.5bh :номер функции DOS
int 21h :открываем файл
jnc ml ;обойдем открытие файла
moval.02h :режим доступа
1movah.3dh -.номер функции DOS
int 21h :открываем файл
jc exit :переход в случае ошибки
ml: :действия при успешном открытии файла:
mov handle.ах ;сохраним дескриптор файла
т2: ;закрываем файл:

В случае задания имени, как в примере выше, файл будет создан в корневом каталоге текущего диска. Для того чтобы разместить файл в конкретном каталоге, необходимо указать полный путь к нему с завершающим символом ' \' и 13 нулевыми байтами на конце, например:
filename db 'e:\asm_on_a\'.13 dup(0),0