Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




Прерывания BIOS:

l 13Н — обмен данными с жестким диском (при его отсутствии — с гибким диском);

l 40Н — обмен данными с гибким диском (если есть жесткий диск).

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

l Прерывание DOS 21H.

Имеется несколько десятков различных вариантов прерывания 21Н (определяемых содержимым регистра AH), реализующих так называемые универсальные функции управления файлами при наличии любых версий MS DOS (использующих при обращении к файлам FСB) и несколько десятков вариантов прерывания, предоставляющих так называемые расширенные функции управления файлами при наличии версии MS DOS 2.0 и выше (через строку ASCIIZ).

Ниже обсуждаются лишь наиболее популярные варианты прерывания 21H DOS, реализующие расширенные функции управления файлами.

При прерываниях этого типа файл полностью идентифицируется ASCIIZ-строкой, а после открытия файла — логическим номером, присваиваемым файлу при его создании и открытии (после закрытия файла его логический номер освобождается).

Вот сводка некоторых служебных функций DOS прерывания 21Н.

l AH = 3Ch — создание файла: формируются ASCIIZ-строка, идентифицирующая файл, и атрибут файла; вектор-адрес ASCIIZ-строки файла помещают в регистры DS:DX, в регистр CX помещают атрибут файла; в регистре AX возвращается логический номер файла.

l AH = 3Dh — открытие файла: вектор-адрес ASCIIZ-строки помещают в регистры DS:DX, в регистр AL записывается признак возможной работы с файлом (AL = 0 — файл открывается только для чтения, AL = 1 — только для записи, AL = 2 — и для чтения, и для записи); в регистре AX возвращается логический номер файла.

l AH = 3Eh — закрытие файла (высвобождение его логического номера): логический номер помещают в регистр ВX.

l AH = 3Fh — чтение из файла: в регистр BX помещают логический номер, в CX — число считываемых байтов, в DS:DX — вектор-адрес буфера (поля ОЗУ), отведенного для записи считываемой информации; число фактически считанных байтов возвращается в регистре AX.

l AH = 40h — запись в файл: в регистр BX помещают логический номер, в CX — число записываемых байтов, в DS:DX — вектор-адрес буфера (поля ОЗУ), хранящего записываемую информацию; в AX возвращается число фактически записанных байтов.

l AH = 41h — удаление файла: в регистры DS:DX заносится вектор-адрес ASCIIZ-строки файла.

l AH = 42h — установка указателя текущей записи в файле: в регистр BX заносится логический номер, в регистр AL — указание на базовую установку указателя текущей записи (AL = 0 — начало файла, AL = 1 — прежнее значение текущей записи, AL = 2 — конец файла), в регистры CX:DX — смещение указателя относительно базовой позиции (чаще всего 0); в регистрах DX:AX возвращается смещение текущей записи файла относительно начала файла.

l AH = 43h — установка новых атрибутов файла: в регистры DS:DX заносится адрес ASCIIZ-строки файла, в CX — значения атрибутов, в AL находится «1» (если в AL — «0», то происходит чтение атрибутов, которые возвращаются в CX).

l AH = 56h — переименование файла: в регистровой паре DS:DX указывается адрес ASCIIZ-строки со старым именем файла, в регистры ES:DI заносится адрес ASCIIZ-строки с новым именем файла.

Во всех перечисленных случаях при появлении ошибки в выполнении процедуры в регистре FL флаг CF устанавливается в «1»; код ошибки возвращается в регистре AX.

Ниже приводятся фрагменты программ работы с файлами по ASCIIZ-строке:

path db C:filename.ext, 0; ASCIIZ-строка

buf db 1000 dup(?); буфер обмена

handle dw?; логический номер

size dw?; размер файла

l Чтение из файла:

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

mov DX, offset path; адрес ASCIIZ-строки в DX

mov AL, 0; открываем только для чтения

mov AH, 3DH; функция открытия файла

int 21H; выполнение прерывания

jc open_error; если CF=1, обработка ошибки открытия файла

mov handle, AX; запись логического номера

l Определение размера файла:

mov AH, 42H; установка указателя текущей позиции

mov AL, 2; код установки в конец файла

mov BX, handle; запись логического номера

mov CX, 0; смещение = 0

mov DX, 0; смещение = 0

int 21H; выполнение прерывания

jc point_error1; если CF=1, обработка ошибки установки указателя

mov size, AX; запись размера файла

l Установка указателя в начало файла:

mov AH, 42H; установка указателя текущей позиции

mov AL, 0; код установки в начало файла

mov CX, 0; смещение = 0

mov DX, 0; смещение = 0

int 21H; выполнение прерывания

jc point_error2; если CF=1, обработка ошибки установки указателя

l Чтение файла:

mov AH, 3FH; функция чтения из файла

mov BX, handle; запись логического номера

mov CX, size; запись размера файла

mov DX, offset buf; запись адреса буфера обмена

int 21H; выполнение прерывания

jc read_error; если CF=1, обработка ошибки чтения из файла

l Закрытие файла:

mov BX, handle; запись логического номера

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

int 21H; выполнение прерывания

jc close_erro r; если CF=1, обработка ошибки закрытия файла

Запись в файл:

l Полная перезапись файла.

; Открытие (создание) файла

mov DX, offset path

mov CX, 0

mov AH, 3CH

int 21H

jc open_error

mov han, AX

; Запись в файл 500 байтов

mov AH, 40H

mov BX, handle

mov CX, 500

mov DX, offset buf

int 21H

jc write_error

l Добавление записей в файл.

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

mov DX, offset path

mov AL, 1

mov AH, 3DH

int 21H

jc open_error

mov handle, AX

; Перемещение указателя в конец файла

mov BX, AX

mov CX, 0

mov DX, 0

mov AL, 2

mov AH, 42H

int 21H

jc point_error

; Запись в файл 300 байтов

mov AH, 40H

mov BX, handle

mov CX, 300

mov DX, offset buf

int 21H

jc write_error





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 418 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если президенты не могут делать этого со своими женами, они делают это со своими странами © Иосиф Бродский
==> читать все изречения...

2507 - | 2380 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.013 с.