- •Программное управление — основа автоматизации вычислительного процесса
- •2 Состав машинных команд
- •3 Режимы работы компьютеров
- •3.1 Однопрограммные и многопрограммные режимы
- •I.Система прерываний программ в пк
- •3.2 Адресация регистров и ячеек памяти в пк
- •3.3 Относительная адресация
- •II.Стековая адресация
- •3.4 Элементы программирования на языке ассемблер
- •4 Основные компоненты языка ассемблер
- •4.1Алфавит языка
- •4.2 Константы (числа и строки)
- •4.3 Директивы (псевдооператоры)
- •4.4 Модификаторы
- •4.5 Адресация регистров и ячеек памяти в ассемблере
- •4.6 Непосредственная адресация
- •4.7 Прямая адресация регистров мпп
- •4.8 Адресация ячеек оп
- •Основные команды языка ассемблер
- •A.Команды пересылки данных
- •I.Команды сложения, вычитания и сравнения
- •1.Команды приращения
- •A.Команды умножения
- •I.Команды безусловной передачи данных
- •4.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •4.10 Команда перехода к подпрограмме: call opr
- •4.11 Команда выхода из подпрограммы
- •4.12 Команды условной передачи управления
- •4.13 Команды условной передачи управления для беззнаковых данных
- •4.14 Команды условной передачи управления для знаковых данных
- •4.15 Команды условной передачи управления для прочих проверок
- •4.16 Команды управления циклами
- •4.17 Команды прерывания
- •4.18Основные директивы ассемблера
- •4.19 Директивы определения идентификаторов
- •4.20 Директивы определения данных
- •Директивы определения сегментов и процедур
- •4.21 Директивы управления трансляцией
- •5 Краткие сведения о программировании процедур работы с устройствами ввода-вывода
- •5.1 Программирование работы с дисплеем
- •5.2 Видеооперации с прерыванием 10н bios
- •5.3 Видеооперации с прерыванием 21н dos
- •5.4 Программирование работы с клавиатурой
- •5.5 Программирование работы с принтерами
- •5.6 Печатающие устройства параллельного типа
- •5.7 Печатающее устройство последовательного типа
- •5.8 Программирование работы с файлами
- •5.9 Прерывания, используемые при работе с файлами на дисках
- •5.10 Некоторые аспекты создания исполняемых программ
- •5.11 Процедуры формирования программы
- •5.12 Структура исходной программы на языке ассемблера для получения исполняемой программы .Ехе
- •5.13 Основные сведения о листинге и его структуре
- •5.14 Особенности структуры машинных команд
- •5.14 Последовательность работы пк при выполнении программы
- •6 Краткие сведения об отладчике программ debug
- •6.1 Основные команды отладчика debug
5.8 Программирование работы с файлами
Файл — выделенная по какому-либо признаку поименованная совокупность информационных записей, хранящихся на диске. Каждой записи в пределах файла присваивается уникальный порядковый номер.
Запись идентифицируется своим адресом:
адрес_записи = имя_файла:номер_записи.
Файловая система поддерживает два типа доступа к записям файла:
последовательный метод доступа;
прямой метод доступа.
Механизм доступа к файлу и его записям при программировании имеет два варианта:
доступ к файлу с использованием специальной таблицы — управляющего блока файла (FCB);
доступ к файлу по идентификатору (ASCIIZ).
Использование FCB для обращения к файлу позволяет реализовать и произвольный и последовательный методы организации доступа, но часто оказывается довольно сложным, поэтому на практике, если не требуется выполнять детализированные процедуры с отдельными дорожками и секторами диска, чаще применяется обращение к файлу по идентификатору.
5.9 Прерывания, используемые при работе с файлами на дисках
Прерывания BIOS:
13Н — обмен данными с жестким диском (если «винчестера» у ПК нет, то с гибким диском);
40Н — обмен данными с гибким диском (если есть жесткий диск).
Эти прерывания обеспечивают выполнение многих функций, определяемых содержимым регистра АН и полезных при разработке дисковых утилит вспомогательных программ и средств защиты от копирования, ибо они позволяют выполнять операции с отдельными дорожками и секторами диска.
Прерывание DOS 2H.
Имеется несколько десятков различных вариантов прерывания 21Н (определяемых содержимым регистра АН), реализующих так называемые универсальные функции управления файлами при наличии любых версий MS-DOS (использующих при обращении к файлам FCB) и несколько десятков вариантов прерывания, реализующих так называемые расширенные функции управления файлами при наличии версии MS-DOS 2.0 и выше (использующих при обращении к файлам строку ASCIIZ).
Ниже обсуждаются лишь наиболее популярные варианты прерывания 21Н DOS, реализующие расширенные функции управления файлами.
При прерываниях этого типа файл полностью идентифицируется ASCIIZ-строкой, а после открытия файла — логическим номером, присваиваемым файлу при его создании и открытии (после закрытия файла его логический номер удаляется).
Сводка некоторых служебных функций DOS прерывания 21Н.
АН=ЗСН — создание файла: формируются ASCIIZ-строка, идентифицирующая файл и атрибут файла; вектор-адрес ASCIIZ-строки файла помещают в регистры DS: ОХ, в регистр СХ помещают атрибут файла; в регистре АХ возвращается логический номер файла.
AH=3DH — открытие файла: вектор-адрес ASCIIZ-строки помещают в регистры DS: DX, в регистр AL записывается признак возможной работы с файлом (AL=0 – файл открывается только для чтения, AL=1 — только для записи, АL=2 — и для чтения, и для записи); в регистре АХ возвращается логический номер файла.
АH=3EH — закрытие файла (закрытие его логического номера): логический но мер помещают в регистр ВХ.
AH=3FH — чтение из файла: в регистр ВХ помещают логический номер, в СХ - число считываемых байтов, в DS:DX — вектор-адрес буфера (поля ОЗУ), от веденного для записи считываемой информации; число фактически считанных байтов возвращается в регистре АХ.
АН=40 — запись в файл: в регистр ВХ помещают логический номер, в СХ — число записываемых байтов, в DS: DX — вектор-адрес буфера (поля ОЗУ), хранящего записываемую информацию; в АХ возвращается число фактически записанных байтов.
АН=41 — удаление файла: в регистры DS:DX заносится вектор-адрес ASCIIZ- строки файла.
АН=42 — установка указателя текущей записи в файле: в регистр ВХ заносится логический номер, в регистре AL — указание на базовую установку указателя текущей записи (А1_=0 — начало файла, А1_=1 — прежнее значение текущей записи, А1_=2 — конец файла), в регистры CX:DX — смещение указателя относительно базовой установки (чаще всего 0); в регистрах DX: АХ возвращается смещение текущей записи файла относительно начала файла.
АН=43 — установка нового атрибута файла: в регистры DS: DX заносится адрес ASCIIZ-строки файла, в СХ — новый атрибут, в AL заносится «1» (если в AL — «О», то чтение атрибута, который возвращается в СХ).
АН=56 — переименование файла: в регистры DS:DX заносится адрес ASCIIZ-строки со старым именем файла, в регистры DS:DX заносится адрес ASCIIZ-строки с новым именем файла.
При всех названных прерываниях при появлении ошибки в выполнении процедуры в регистре FL флаг CF устанавливается в «1»; код ошибки возвращается в регистре АХ. Ниже приводятся фрагменты программ работы с файлами по ASCIIZ-строке при следующих форматах данных:
path db C:filename.ext, 0
buf db 1000 dup(?)
han dw ?
size dw ?
; ASCIIZ-строка
: буфер обмена
; логический номер
; размер файла
Чтение из файла:
;
Открытие
файла
mov DX, offset path
mov AL, 0
mov AH, 3DH
int 21H
jc open_error
mov
han,
AX
Определение размера файла:
; адрес ASCIIZ-строки в DX
; открываем только для чтения
; функция открытия файла
; код прерывания
; если CF-1,- обработка ошибки открытия файла
; запись логического номера
mov
АН, 42Н
mov
AL,
2
mov
BX,
han
mov CX, 0
mov DX, 0
Int 21H
jc point_error1
mov
size.
AX
; код установки в конец файла
; запись логического номера
; смещение - О
; смещение - О
; код прерывания
; если CF-1,- обработка ошибки установки указателя
; запись размера файла
Установка указателя в начало файла:
mov
АН, 42Н
mov
AL,
О
mov CX, 0
mov
DX, О
Int 21H
jc
point_error2
; если
CF-1,-
обработка ошибки установки указателя
Чтение файла:
mov
АН, 3FH
mov
BX,
han
mov CX, size
mov DX, offset buf
Int
21H
jc
read_error
; если
CF-1,-
обработка ошибки чтения из файла
смещение – О
смещение – О
; функция чтения из файла
; запись логического номера
; запись размера файла
; запись адреса буфера обмена
; код прерывания
Закрытие файла:
mov BX. пап ; запись логического номера
mov АН, ЗЕН ;
функция закрытия файла
Int 21H ; код прерывания
jc close_erro r
; если CF=1, - обработка ошибки закрытия файла
Запись в файл:
Полная перезапись файла.
; Открытие (создание) файла
mov DX, offset path
mov CX, 0
mov АН, ЗСН
Int 21H
jc open_error
mov han. AX
; Запись в файл 500 байт
mov АН, 40Н
mov BX, han
mov CX, 500
mov DX, offset buf
Int 21H
jc write_error
Добавление записей в файл.
; Открытие файла ,
mov DX offset path
mov AL, 1
mov AH, 3DH
Int 21H
jc open_error
mov han, AX
; Установка указателя в конец файла
mov BX, AX
mov CX. 0
mov DX, О
mov AL, 2
mov АН. 42Н
Int 21H
jc point_error
; Запись в файл 300 байт
mov АН. 40Н
mov BX, han
mov CX. 300
mov DX. offset buf
Int 21H
jc write_error
