Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Моя курсовай МПС.docx
Скачиваний:
9
Добавлен:
19.12.2018
Размер:
335.07 Кб
Скачать

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).