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

Функция 3FH. Функция 40H. Функция 3EH. Buf DB 512 DUP (?)          ; буфер для чтения. 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 – новое значение атрибута (табл. 12). Если регистр AL содержит 0, то после выполнения функции в регистр CX будет помещен атрибут файла. Регистровая пара DS: DX содержит адрес ASCIIZ-строки с именем файла.

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

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

. . .

MOV AH, 43H

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

Поделиться:





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



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