![](/user_photo/2706_HbeT2.jpg)
- •Введение
- •1 Формулировка задачи
- •2 Алгоритм программы
- •2.1 Разработка алгоритма основной программы
- •2.2 Разработка алгоритма процедуры чтение из файла uk64.Dat и запись в файл My.Dat до нулевой строки
- •2.3 Разработка алгоритма выбор определённых байтов и битов и записи результата в файл Result.Dat
- •3.2 Используемые команды
- •3.2.1 Команды пересылки и загрузки
- •3.2.2 Арифметические команды
- •3.3 Используемые функции dos
- •3.3.1 Открытие файла
- •3.3.2 Создание файла
- •3.3.3 Чтение данных из файла
- •3.3.4 Закрытие файла
- •3.3.5 Запись в файл
- •3.3.6 Установка указателя файла
- •3.5.3 CreationMy – Создание файла My.Dat
- •3.5.4 NewStr – Чтение из файла uk64.Dat и запись в файл My.Dat до нулевой строки
- •3.5.5 CloseCadr – Закрытие uk64.Dat, создание result.Dat. Выполнение функции установки указателя файла
- •3.5.6 Cursor – Установка указателя на начало файла My.Dat
- •3.5.7 NextStr – выбор определённых байтов и битов и записи результата в файл Result.Dat
- •Список используемых источников
- •Приложение а – Код основной программы
- •Приложение b – Код программы построения графика
3.3.3 Чтение данных из файла
Вход:
-
AH = 3fH
-
BX = описатель файла
-
DS:DX = адрес буфера для чтения данных
-
CX = число считываемых байт
Выход:
-
AX = код ошибки если CF установлен или число действительно прочитанных байт
Описание:
-
CX байт данных считываются из файла или устройства с описателем, указанным в BX. данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.
-
Используйте функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Модифицирует указатель чтения/записи файла, подготавливая его к последующим операциям чтения или записи.
-
Вы должны всегда сравнивать возвращаемое значение AX (число прочитанных байт) с CX (запрошенное число байт):
-
если AX = CX, (и CF сброшен) - чтение было корректным без ошибок
-
если AX = 0, достигнут конец файла (EOF)
-
если AX < CX (но ненулевой):
-
при чтении с устройства - входная строка имеет длину AX байт
3.3.4 Закрытие файла
Вход:
-
AH = 3eH
-
BX = описатель файла
Выход:
-
AX = код ошибки если CF установлен
Описание:
-
BX содержит описатель файла (handle), возвращенный при открытии файл, представленный этим описателем, закрывается, его буфера сбрасываются, и оглавление обновляется корректными размером, временем и датой.
3.3.5 Запись в файл
Вход:
-
AH = 40H
-
BX = описатель файла
-
DS:DX = адрес буфера, содержащего записываемые данные
-
CX = число записываемых байт
Выход:
-
AX = код ошибки если CF установлен
-
AL = число реально считанных байт (лучший тест для ошибок)
Описание:
-
CX байт данных записывается в файл или на устройство с описателем, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX. Данные записываются, начиная с текущей позиции указателя чтения/записи файла.
-
Нужно использовать функцию 42H LSEEK, чтобы установить указатель файла, если необходимо (OPEN сбрасывает указатель в 0). Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям последовательного чтения или записи.
-
Нужно всегда сравнивать возвращаемое значение AX (число записанных байт) с CX (запрошенное число байт для записи).
-
если AX = CX, запись была успешной
-
если AX < CX, встретилась ошибка (скорее всего, переполнение)
3.3.6 Установка указателя файла
Вход:
-
AH = 42H
-
BX = описатель файла
-
CX:DX = на сколько передвинуть указатель: (CX * 65536) + DX
-
AL = 0 переместить к началу файла + CX:DX
-
AL = 1 переместить к текущей позиции + CX:DX
-
AL = 2 переместить к концу файла + CX:DX
Выход:
-
AX = код ошибки если CF установлен
-
DX:AX = новая позиция указателя файла (если нет ошибки)
Описание:
-
перемещает логический указатель чтения/записи к нужному адресу. Очередная операция чтения или записи начнется с этого адреса.
Замечание:
Вызов с AL=2, CX=0, DX=0 возвращает длину файла в DX:AX. DX здесь старшее значащее слово: действительная длина (DX * 65536)
3.4 Синтаксис процедуры
На языке ассемблера процедура оформляется следующим образом:
метка proc тип_адресации
;тело процедуры
метка endp
3.5 Описание программы
Программа состоит из 6 процедур. Подробный разбор приведён ниже. В скобках будут указываться строки Приложения А.
3.5.1 Begin- Начало
Выполняется инициализация сегментного регистра ds (строки 3-4).
Настройка дополнительного сегмента данных (es в качестве адреса цепочки-приёмника) для работы с цепочками данных (строки 6-7).
Сброс флага направления для задания направления (слева направо) (строка 8).
3.5.2 OpenUK – Открытие файла UK64
Используется функция открытия файла (3dh) (строка 31), al присваивает значение 0 (только для чтения) (строка 32). В dx загружается адрес, по которому должен находиться файл (строка 33). Сохраняется дескриптор файла в переменную handle1 и в bx (строки 35 - 36).
После в основной программе загружается адрес строки дампа памяти (переменная buffer) в dx (строка 11). Регистру cx присваивается значение в соответствии с вариантом и выполняется декремент, т.к. в дампе первая нулевая строка отсутствует (строки 12 - 13).