В СХ, а точнее, в СL – аттрибут файла 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

В СХ, а точнее, в СL – аттрибут файла



0 – отсутствие аттрибутов

1 – только чтение

2 – скрытый файл

4 – системный

8 – метка тома

16 = 10h – подкаталог

32 = 20h – архив – этот разряд сброшен для всех файлов, которые изменялись после последнего копирования.

 

После выполнения всех необходимых действий по созданию файла, функция 3Сh возвращает в регистре АХ дескриптор созданного файла, которым могли в дальнейшем пользоваться для записи в файл или чтения из него. Если файл с заданным именем уже существовал, функция 3Сh фактичеки уничтожит имеющийся файл и создаст новый с тем же именем.

Так как АХ используется для возврата как логического номера, так и кода ошибки, то в качестве признака ошибки необходимо использовать флаг CF (флаг переноса).

Возможны коды возврата:

3 – путь не найден

4 – нет свободного логического номера

5 – отказ в доступе – либо в каталоге нет места

Для новой записи, либо уже существующий файл защищен от записи и не может быть открыт для вывода данных.

 

Функция 3Dh - открыть файл (OPEN)

 

DS:DX – адрес строки, содержащей путь и имя файла

AL - код режима открытия

Рассмотрим только разряды 0¸2.

       
      Только чтение Только запись Чтение/запись

 

Бит 7 – бит наследования

Биты 4-6 – режимы совместного использования.

Коды возврата в АХ:

2 – файл не найден

3 – путь не найден

4 – нет свободного логического номера файла

5 – отказ в доступе

12 – недопустимый код доступа

 

Eh – закрытие файла

Логический номер в ВХ.

Код ошибки 6 – ошибочный логический номер.

 

Fh – читать данные изфайла или устройства

Логический номер - ВХ.

Число байт – СХ

Адрес буфера – DS:DX

В АХ возвращается число действительно считанных байтов. Если в АХ 0, то программа пыталась считать данные за концом файла.

Код ошибки:

5 – отказ в доступе

6 – ошибочный логический номер.

 

40h – вывести данные в файл или на устройство (WRITE)

Логический номер - ВХ.

Число байт – СХ

Адрес выводимых данных – DS:DX

В АХ возвращается число действительно выведенных байтов.

Проверка состоит их 2х шагов

1) СF

2) AX =? CX. Если АХ<СХ – на диске не хватило места.

 

H – удалить файл.

DS:DX – адрес строки, определяющей имя файла.

Заполнители? и * в имени файла использовать нельзя.

 

H – переместить указатель текущей позиции в файле.

Логический номер – ВХ.

Новое положение указателя задается путем загрузки в регистр AL исходного положения указателя, а в пару регистров СХ:DX – число байтов, на которое необходимо переместить указатель. Загружаемое в пару регистров СХ:DX смещение в байтах – это 32-битовое число без знака. В СХ – старшая часть, в DX – младшая. Если смещение меньше 65535, то СХ = 0. Исходное положение в АL задается с помощью так называемого кода метода:

АL = 0 – смещение берется от начала файла и указатель изменяется на СХ:DX от этой точки

АL = 1 – смещение берется от текущей позиции

АL = 2 – смещение берется от конца файла.

В последнем случае в паре регистров СХ:DX обычно ноль, чтобы определить текущий размер файла. Если задать смещение 0 и запросить метод 0 – то возврат в начало файла.

Коды ошибок:

1 – ошибочный номер функции

6 – ошибочный логический номер

 

Пример

 

; создание файла

MOV AH, 3Ch; Функция CREATE

MOV CX, 0; Без аттрибутов

MOV DX, OFFSET Filename; Адрес имени Файла

INT 21h; ВЫзов DOS

Jc error1; ошибка

Mov Handler, AX; сохраним дескриптор

; запись строки в файл

MOV AH, 40h; Функция записи

MOV BX, Handler; Дескриптор

MOV CX, BufLen; Число записываемых байтов

MOV DX, OFFSET Buf; Адрес буфера

INT 21h

Jc error2

; закрытие файла

MOV AH, 3Eh;

MOV BX, Handler

INT 21h

Jc error3

; завершение программы

MOV AX, 4C00h; Функция завершения

INT 21h

error1: …

error2: …

error3: …

 

; данные

Buf DB ‘0123456789’; Данные, записываемые в файл

BufLen EQU $ - Buf; Длина данных. $ - текущее значение счетчика

Handler DW?; Ячейка для дескриптора

Filename DB ‘D:\test\myfile.001’,0; ASCIIZ строка спецификации файла

В простых программах файлы можно не закрывать, так как функция завершения 4Ch закрывает все открытые файлы программы.

 

Рассмотрим пример программы с имеющимся файлом:

; Открыть файл

MOV AH, 3Dh; функция OPEN

MOV AL, 2; Доступ для чтения/записи

MOV DX, OFFSET Filename; Адрес имени файла

INT 21h

Jc error1

MOV Handler, AX; Сохранение дескриптора

; Пытаемся прочитать 65535 байт

MOV AH, 3Fh; Функция READ

MOV BX, Handler; Дескриптор

MOV CX, 65535; Сколько читать

MOV DX, OFFSET BufIn; Сюда читать

INT 21h

Jc error2

MOV CX, AX; сколько реально прочитано

; Вывод прочитанного на экран

MOV AH, 40h; функция WRITE

MOV BX, 1; Дескриптор стандартного вывода

MOV DX, OFFSET BufIn; отсюда выводить (СХ байт)

Int 21h

; завершение программы

MOV AX, 4C00h; Функция завершения

INT 21h

error1: …

error2: …

error3: …

; Данные

BufIn DB 256 dup (‘ ‘); буфер ввода

Handler DW?

Filename DB ‘D:\test\myf.001’,0; спецификация файла

 

В данном случае на экран.

Удобнее вывести с помощью 40h, так какмы не занем длину выводимого сообщения, то есть не знаем, куда поставить ‘$’ для функции 9h.

 

Анализ системных ошибок

MOV AH, Function; Номер функции

; Заполнение регистров параметрами, необходимыми для

; выполнения данной функции

INT 21h

JC Error; флаг СF установлен

; Нет, нормальное продолжение программы

…………..

Error: ….

; Да, анализ ошибок в АХ

CMP AX, 1

JE Error1

CMP AX, 2

JE Error2

…..


43h – получить, установить аттрибуты файла

56h – переименовать файл

57h – получить/установить дату и время последнего изменения файла

 

В DOS 3.00

5Ah – создать временный файл

CX - аттрибут

DS:DX – имя пути, должно заканчиваться ‘ \’

Строка должна иметь длину на 12 байт больше длины имени пути, чтобы DOS могла бы дополнить уникальным именем файла.

5Bh – создать новый файл

В отличие от 3Сh, если файл уже существует, то 5Bh сообщает об ошибке.

 

5Сh – блокировать/разблокировать доступ к файлу.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 201; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 107.21.176.63 (0.015 с.)