Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

MOV DX, OFFSET FileName  ; ASCIIZ-строка




Функция 3FH. Назначение: чтение данных из открытого файла. Для выполнения функции в регистр BX необходимо поместить файловый номер, в регистр CX – число байт, которое необходимо прочитать, а в регистровую пару DS: DX – адрес области памяти, куда будут прочитаны данные. Перед чтением файл должен быть открыт функцией 3DH. При успешном выполнении функции в регистр AX заносится число реально прочитанных байт. Если число реально прочитанных байт меньше, чем было задано, то это означает, что был достигнут конец файла.

    Так как DOS ограничивает число одновременно открытых файлов (параметр FILES в CONFIG. SYS), то программа, успешно обработавшая какой-либо файл, должна закрыть его.

    Пример использования функции 3FH:

Buf DB 512 DUP (? )        ; буфер для чтения

Handle DW?                     ; файловый номер

. . .

MOV AH, 3FH

MOV BX, Handle

MOV CX, 512                           ; чтение 512 байт

MOV DX, OFFSET Buf            ; настройка DX на буфер Buf

INT 21H

JC Error

CMP AX, 512

JNE EndOfFile

. . .                           ; функция выполнилась успешно

Error:

. . .                                     ; возникла ошибка

EndOfFile:

. . .                                    ; достигнут конец файла

     В случае ошибки в регистре AX устанавливается код 05H (нет доступа) или 06H (неправильный файловый номер).

Функция 40H. Назначение: запись данных в открытый файл. Для выполнения функции в регистр BX необходимо поместить файловый номер, в регистр CX – число байт, которое необходимо записать, а в регистровую пару DS: DX – адрес области памяти, откуда будут записаны данные. Перед записью файл должен быть открыт для записи или создан функцией 3CH. При успешном выполнении функции в регистр AX заносится число реально записанных байт. Если число реально записанных байт меньше, чем было задано, то это означает, что диск переполнен.

    Пример использования функции 40H:

Buf DB 512 DUP (? ); буфер для записи

Handle DW?                     ; файловый номер

. . .

MOV AH, 40H

MOV BX, Handle

MOV CX, 512                  ; запись 512 байт

MOV DX, OFFSET Buf  ; настройка DX на буфер Buf

INT 21H

JC Error

CMP AX, 512

JNE DiskFull

. . .                           ; функция выполнилась успешно

Error:

. . .                            ; возникла ошибка

DiskFull:

. . .                            ; диск переполнен

 

В случае ошибки в регистре AX устанавливается код 05H (нет доступа) или 06H (неправильный файловый номер).

Функция 3EH. Назначение: закрытие ранее открытого файла. Функция закрывает файл, открытый для чтения или для записи. Если закрывается файл, открытый для записи, функция 3EH записывает оставшиеся данные из файлового буфера на диск, корректирует оглавление и таблицу FAT. Для выполнения функции в регистр BX необходимо занести файловый номер.

    Пример использования функции 3EH:

Handle DW?                     ; файловый номер

. . .

MOV AH, 3EH

MOV BX, Handle

INT 21H

В случае ошибки в регистре AX устанавливается код 06H (неправильный файловый номер).

Функция 41H. Назначение: удаление указанного файла. Для выполнения функции в регистровой паре DS: DX необходимо указать адрес ASCIIZ-строки, содержащей имя файла. Функцией 41H нельзя удалить файл с атрибутом «только для чтения».

    Пример использования функции 41H:

FileName DB ‘c: \docs\my. txt’, 0; имя файла

. . .

MOV AH, 41H

MOV DX, OFFSET FileName                     ; ASCIIZ-строка

INT 21H

 

В случае ошибки в регистре AX устанавливается код 02H (файл не найден) или 05H (нет доступа).

Функция 42H. Назначение: управление файловым указателем. Файловый указатель – это 32-битное число, которое определяет текущую позицию чтения/записи для файла. При открытии файла значение файлового указателя устанавливается в 0 и увеличивается при последующих операциях чтения/записи (последовательный доступ к файлу). Для получения прямого доступа к записям файла можно изменять значение файлового указателя при помощи функции 42H.

    Для установки файлового указателя необходимо поместить в регистр BX файловый номер, а в регистровую пару CX: DX – требуемое значение файлового указателя (смещение). В регистре DX устанавливаются младшие 16 бит смещения, а в регистре CX – старшие 16 бит. В регистре AL должен быть установлен один из кодов, которые определяют точку отсчета смещения:

0 – смещение от начала файла;

1 – смещение от текущего значения файлового указателя, которое может быть в любом месте, включая начало файла;

2 – смещение от конца файла.

    Пример использования функции 42H:

Handle DW?           ; файловый номер

. . .

MOV AH, 42H

MOV AL, 0

MOV BX, Handle

MOV CX, 0010H   ; смещение 1052672 от начала файла

MOV DX, 1000H

INT 21H

JC Error

. . .                  ; функция выполнилась успешно

Error:

. . .                  ; возникла ошибка

В случае ошибки в регистре AX устанавливается код 01H (ошибка кода отсчета) или 06H (неверный файловый номер).

Функция 43H. Назначение: проверка или изменение атрибута файла. Эта функция позволяет получить атрибут файла или изменить его. Для получения атрибута регистр AL должен содержать 0. Для изменения атрибута регистр AL должен содержать 1, а регистр CX – новое значение атрибута (см. табл. 6. 1). Если регистр AL содержит 0, то после выполнения функции в регистр CX будет помещен атрибут файла. Регистровая пара DS: DX содержит адрес ASCIIZ-строки с именем файла.

    Пример использования функции 43H:

FileName DB ‘c: \docs\my. txt’, 0; имя файла

. . .

MOV AH, 43H

MOV AL, 01H                 ; установка

MOV CX, 01H                 ; атрибута «только для чтения»

MOV DX, OFFSET FileName            ; ASCIIZ-строка

INT 21H

    При использовании функции 43H атрибут «нормальный» означает отсутствие всех атрибутов файла. С помощью функции нельзя изменением атрибута из файла получить директорию и наоборот.

В случае ошибки в регистре AX устанавливается код 02H, 03H или 05H.

Функция 56H. Назначение: переименование существующего файла. Регистровая пара DS: DX должна содержать адрес ASCIIZ-строки с именем переименовываемого файла, а регистровая пара ES: DI – адрес ASCIIZ-строки с новым значением имени файла. Буквы дисков в обеих ASCIIZ-строках должны быть одинаковыми, а пути могут различаться. Таким образом, функция 56H позволяет не только переименовывать файл, но и переносить его из одного каталога в другой.

    Пример использования функции 56H:

FileName1 DB ‘c: \docs\my. txt’, 0; старое имя файла

FileName2 DB ‘c: \temp\old. txt’, 0; новое имя файла

. . .

MOV AH, 56H

MOV AX, SEG FileName1

MOV DS, AX                                               ; настройка DS

MOV ES, AX                                               ; настройка ES

MOV DX, OFFSET FileName1                   ; ASCIIZ-строка

MOV DI, OFFSET FileName2                    ; ASCIIZ-строка

INT 21H

В случае ошибки в регистре AX устанавливается код 03H (путь не найден), 05H (доступ запрещен) или 17H (разные дисководы).

    Следующий пример демонстрирует программу, которая создает в текущем каталоге файл ENV. TXT и записывает в него свое окружение (переменные окружения и их значения), при этом строки разделяются символами перевода строки (в блоке переменных окружения программы строки разделяются нулями).

CODE SEGMENT

   ASSUME CS: CODE, DS: CODE; CS и DS указывают на сегмент CODE

   ORG 100H                       ; COM программа

Start: MOV AH, 3CH                        ; функция создания файла

   MOV CX, 0                           ; с нормальным атрибутом

   MOV DX, OFFSET FileName    ; ASCIIZ-строка

   INT 21H                                ; вызов DOS

   JC Error                                  переход по ошибке

   MOV BX, AX                        ; сохранение файлоаого номера в BX

   MOV AX, DS: 2CH                         ; настройка DS

   MOV DS, AX                        ; на сегмент окружения программы

   XOR SI, SI                            ; обнуление SI

M2: MOV DX, SI                      ; запоминание начала строки в DX

M1: LODSB                                    ; поиск нуля (конца строки)

   CMP AL, 0

   JNZ M1

   CMP BYTE PTR [SI], 0        ; если это последняя строка,

   JZ Exit                                             ; то выход из программы

   MOV CX, SI                              ; вычисление длины строки

   SUB CX, DX

   DEC CX

   MOV AH, 40H                           ; функция записи в файл

   INT 21H                           ; вызов DOS

   JC Error                           ; переход по ошибке

   MOV CX, 2                      ; запись 2-х байт

   PUSH DS                         ; сохранение DS

   PUSH CS                         ; настройка DS

   POP DS                                       ; на сегмент команд (данных)

   MOV DX, OFFSET CrLf                ; смещение области для записи

   MOV AH, 40H                           ; функция записи в файл

   INT 21H                           ; вызов DOS

   POP DS                                       ; восстановление DS

   JC Error                           ; переход по ошибке

   JMP M2                                 ; повтор цикла записи строки в файл

Exit: MOV AH, 3EH                        ; функция закрытия файла

   INT 21H                           ; вызов DOS

Error: RET                                       ; выход из программы

   FileName DB 'ENV. TXT', 0    ; имя создаваемого файла

   CrLf DB 0Dh, 0Ah                          ; символы перевода строки

CODE ENDS

   END Start                              ; определение точки входа

        

       Функции для работы с каталогами выполняют такие операции, как создание и удаление каталогов, а также получение и установка текущего каталога.

Функция 39H. Назначение: создание каталога. Действие функции аналогично команде DOS «MKDIR». Для выполнения функции в регистровую пару DS: DX необходимо занести адрес ASCIIZ-строки с именем создаваемого каталога. ASCIIZ-строка может включать существующий путь. Функцией 39H можно создать каталог только в уже существующем каталоге, т. е. эта функция не может создать сразу дерево несуществующих каталогов. ASCIIZ-строка для функции 39H может иметь максимум 64 символа (не включая признак конца строки). Если в пути не указана буква диска, то каталог создается на текущем диске. То же относится и к пути каталога.

    Пример использования функции 39H:

DirName DB ‘c: \games’, 0; имя создаваемого каталога

. . .

MOV AH, 39H

MOV DX, OFFSET DirName   ; ASCIIZ-строка

INT 21H

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...