Анимация
JavaScript
|
Главная Библионтека высоких требованиях к быстродействию программы, либо при работе с нестандартными устройствами ввода-вывода. Обращение к функциям DOS и BIOS осуществляется командами ШТ по единому правилу. Перед командой вызова системной функции в регистр АН загружается номер функции, в другие (строго определенные для данной функции) регистры загружаются необходимые параметры. Затем выполняется одна из команд: INT 21 h - вызов диспетчера DOS; INT lOh - вызов драйвера экрана BIOS; INT 13h - вызов драйвера жесткого диска BIOS; INT 16h - вызов драйвера клавиатуры BIOS. Код завершения после работы системной функции обычно возвращается во флаге CF: CF = О - функция выполнилась успешно, CF = 1 - произошла ошибка. В последнем случае возвращается еще и код ошибки (обычно в регистре АХ). 1.2.8. Работа с файлами Файл на диске рассматривается как последовательность байтов, пронумерованных, начиная с нуля. При этом возможен как последовательный, так и прямой доступ к каждому байту. Номер байта в файле, к которому происходит обращение, определяется содержимым файлового указателя. Спецификацш файла - строка символов, содержащая имя диска, путь к файлу и имя файла. Признаком конца строки является нулевой байт. Открывая файл, DOS формирует уникальный 16-разрядный код, используемый в дальнейшем для ссылок на данный файл. Этот код называют номером или дескриптором файла. Дескриптор суть адрес системной области, где хранится информация об открытом файле. Файловые функции, использующие дескрипторы, можно использовать для ввода-вывода через некоторые стандартные УВВ компьютера. При этом последним соответствуют предопределенные дескрипторы, в частности : 0 - стандартный ввод; 1 - стандартный вывод; 2 - стандартная ошибка (вывод диагностических сообщений); 4 - стандартный принтер. Таким образом, используя файловые функции DOS, ввод с клавиатуры можно осуществлять через дескриптор О, вывод на экран - через дескрипторы 1 и 2, вывод на принтер - через дескриптор 4. Стандартный ввод и вывод средствами DOS можно перенаправить на любое устройство или в файл. Рассмотрим некоторые функции DOS, предназначенные для работы с файлами. Создание файла Создает файл. Если файл с заданным именем уже существует, то он усекается до нулевой длины и рассматривается как вновь созданный. При вызове: AH = 3Ch; СХ - атрибуты файла (могут комбинироваться): 0 - без атрибутов, 1 - только для чтения, 2 - скрытый, 3 - системный, 8 - метка тома, 3 2 - атрибут архива; DS: DX - адрес спецификации файла, записанной в формате ASCIIZ. При возврате: АХ - дескриптор. Открытие файла Открывает файл с заданным именем. Возвращает дескриптор для последующих операции над файлом. Устанавливает байтовый указатель на начало файла. При вызове: AH=3Dh; - режим доступа: 0 - чтение, 1 - запись, 2 - чтение и запись; DS • nv "А адрес спецификации файла, записанной в формате ASCIIZ. Если к коду режима добавлено 80h, дескриптор наследуется дочерним процессом. При возврате: дескриптор. Закрытие файла Закрывает файл и освобождает дескриптор. При вызове: AH=3Eh; ВХ - дескриптор. Чтение из файла или устройства Читает данные (начиная с байта, на который установлен указатель) из файла или устройства в буфер пользователя и модифицирует указатель. При вызове: АН =3Fh; ВХ-дескриптор; СХ - запрашиваемое число пересылаемых байтов; DS : DX - адрес буфера пользователя. При возврате: АХ - реальное число прочитанных байтов, которое может оказаться меньше, заданного в СХ при вызове, вследствие достижения конца файла. Запись в файл или устройство Записывает группу подряд расположенных байтов из буфера пользователя в файл, начиная с позиции, на которую установлен указатель. В процессе записи модифицирует указатель. Если при вызове СХ = О, длина файла устанавливается в соответствии с текущим положением указателя. При вызове: АН = 40h; ВХ - дескриптор; СХ - запрашиваемое число пересылаемых байтов; DS : DX - адрес буфера пользователя. При возврате: АХ - реальное число переданных байтов, которое может оказаться меньше, задащ в СХ при вызове, если диск заполнен. 41 h Удаление фа При вызове: AH=41h; DS: DX - адрес спецификации файла, записанной в формате ASCIIZ. 42h Установка файлового указат Устанавливает указатель на любой байт файла для выполнения последующих оп ций чтения или записи. Используется при реализации прямого доступа к файлу, так при последовательном доступе к файлу операция перемещения указателя не требуе Может использоваться для определения длины файла. При вызове: AH = 42h; AL - режим установки указателя: 0 - абсолютное смещение от начала файла, 1 - знаковое смещение от текущего положения указателя, 2 - знаковое смещение от конца файла; ВХ - дескриптор; СХ - старшие разряды смещения; DX - младшие разряды смещения. При возврате: СХ - старшие разряды возвращенного значения указателя; - младшие разряды возвращенного значения указателя. Нахождение первого ф: Ищет первый файл, соответствующий заданному шаблону. При вызове: АН = 4ЕЬ; С X - атрибуты файла (могут комбинироваться): 0 - без атрибутов, 1 - только для чтения, 2 - скрытый, 3 - системный, 8 - метка тома, 16 - каталог, 3 2 - атрибут архива; DS ; DX - адрес спецификации файла, записанной в формате ASCIIZ. При возврате: Имя и расширение помещаются в байты DTA (Disk Transfer Area) со смещением lEh ... 2Ah. Примечание Область обмена с диском DTA находится в PSP по смещеШ1Ю 80h, эта служебная структура DOS используется при работе с файлами. Нахождение следующего файла Ищет следующий файл, после того как функция 4Eh нашла первый файл, соответст- " -<г-------такие файлы, функция 4Fh выполняет- вующий заданному шаблону. Если требуются ся до получения при возврате CF 1. При вызове: АН =4Fh. 2Ah. При возврате: Имя и расширение помещаются в байты DTA со смещением 1 Eh ... Переименование фа! Переименовывает файл или перемещает его в другой каталог. При вызове: АН = 5 6h; DS : DX - адрес текущей спецификации, записанной в формате ASCIIZ; Е S : DI - адрес новой спецификации, записанной в формате ASCIIZ . Коды наиболее распространенных ошибок: 1.2.9. Программа N1. Программа шифрования файлов === Программа шифрования файлов (рис. 1.2.4). ===== Размер преобразуемых файлов - не более 4К байт. ============== Реакция на неправильные действия пользователя отсутствует. === CR = ODh LF = OAh Messagel DB . MODEL small . STACK lOOh Сегмент данных == . DATA CR, LF, File Name: MesslLen = $-Message2DB Mess2Len = $- Password DB Buf ileLen DW Key ibNameDB Messagel CR, LF, Message2 80 DUP DB Key: ; Возврат каретки ; Перевод строки ; Строка запроса на /ввод имени файла Длина строки Messagel ; Строка запроса на ввод пароля ; Длина строки Message2 С*) ; Буфер для хранения пароля 4096 DUP (?) ; Буфер шифрования ; Ячейка для хранения длины файла ? ; Ячейка для хранения ключа шифра 32 DUP (?) ; Буфер для хранения имени файла 1 неправильный номер функции или подфункции; 2 - файл не найден; 3 путь к файлу не найден; 4 - много открытых файйов; 5 - нет доступа к файлу (недопустимая операция, каталог полон, ошибка оборудования и пр.); 6 - неправильный дескриптор; 12 - неправильный код доступа; 17 - неподходящее устройство; 18 - больше нет файлов; 80 - файл уже существует. 0 1 2 3 4 5 [ 6 ] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |