Читайте также:
|
|
- Прерывания BIOS:
• 13Н — обмен данными с жестким диском (если «винчестера» у ПК нет, то с
гибким диском);
• 40Н — обмен данными с гибким диском (если есть жесткий диск).
Эти прерывания обеспечивают выполнение многих функций, определяемых содержимым регистра АН и полезных при разработке дисковых утилит вспомогательных программ и средств защиты от копирования, ибо они позволяют выполнять операции с отдельными дорожками и секторами диска.
- Прерывание DOS 2H.
Имеется несколько десятков различных вариантов прерывания 21Н (определяемых содержимым регистра АН), реализующих так называемые универсальные функции управления файлами при наличии любых версий MS-DOS (использующих при обращении к файлам FCB) и несколько десятков вариантов прерывания, реализующих так называемые расширенные функции управления файлами при наличии версии MS-DOS 2.0 и выше (использующих при обращении к файлам строку ASCIIZ).
Ниже обсуждаются лишь наиболее популярные варианты прерывания 21Н DOS, реализующие расширенные функции управления файлами.
При прерываниях этого типа файл полностью идентифицируется ASCIIZ-строкой, а после открытия файла — логическим номером, присваиваемым файлу при его создании и открытии (после закрытия файла его логический номер удаляется).
Сводка некоторых служебных функций DOS прерывания 21Н.
- АН=ЗСН — создание файла: формируются ASCIIZ-строка, идентифицирующая файл и атрибут файла; вектор-адрес ASCIIZ-строки файла помещают в регистры DS: ОХ, в регистр СХ помещают атрибут файла; в регистре АХ возвращается логический номер файла.
- AH=3DH — открытие файла: вектор-адрес ASCIIZ-строки помещают в регистры DS: DX, в регистр AL записывается признак возможной работы с файлом (AL=0 – файл открывается только для чтения, AL=1 — только для записи, АL=2 — и для чтения, и для записи); в регистре АХ возвращается логический номер файла.
- АH=3EH — закрытие файла (закрытие его логического номера): логический но
мер помещают в регистр ВХ.
- AH=3FH — чтение из файла: в регистр ВХ помещают логический номер, в СХ - число считываемых байтов, в DS:DX — вектор-адрес буфера (поля ОЗУ), от веденного для записи считываемой информации; число фактически считанных байтов возвращается в регистре АХ.
- АН=40 — запись в файл: в регистр ВХ помещают логический номер, в СХ — число записываемых байтов, в DS: DX — вектор-адрес буфера (поля ОЗУ), хранящего записываемую информацию; в АХ возвращается число фактически записанных байтов.
- АН=41 — удаление файла: в регистры DS:DX заносится вектор-адрес ASCIIZ-
строки файла.
- АН=42 — установка указателя текущей записи в файле: в регистр ВХ заносится логический номер, в регистре AL — указание на базовую установку указателя текущей записи (А1_=0 — начало файла, А1_=1 — прежнее значение текущей записи, А1_=2 — конец файла), в регистры CX:DX — смещение указателя относительно базовой установки (чаще всего 0); в регистрах DX: АХ возвращается смещение текущей записи файла относительно начала файла.
- АН=43 — установка нового атрибута файла: в регистры DS: DX заносится адрес ASCIIZ-строки файла, в СХ — новый атрибут, в AL заносится «1» (если в AL — «О», то чтение атрибута, который возвращается в СХ).
- АН=56 — переименование файла: в регистры DS:DX заносится адрес ASCIIZ-строки со старым именем файла, в регистры DS:DX заносится адрес ASCIIZ-строки с новым именем файла.
При всех названных прерываниях при появлении ошибки в выполнении процедуры в регистре FL флаг CF устанавливается в «1»; код ошибки возвращается в регистре АХ. Ниже приводятся фрагменты программ работы с файлами по ASCIIZ-строке при следующих форматах данных:
path db C:filename.ext, 0 buf db 1000 dup(?) han dw? size dw? |
; ASCIIZ-строка
: буфер обмена
; логический номер
; размер файла
Чтение из файла: ; Открытие файла mov DX, offset path mov AL, 0 mov AH, 3DH int 21H jc open_error mov han, AX Определение размера файла: |
;....................................................................................................................................... адрес ASCIIZ-строки в DX
;....................................................................................................................................... открываем только для чтения
;....................................................................................................................................... функция открытия файла
;....................................................................................................................................... код прерывания
;....................................................................................................................................... если CF-1,- обработка ошибки открытия файла
;....................................................................................................................................... запись логического номера
mov АН, 42Н mov AL, 2 mov BX, han mov CX, 0 mov DX, 0 Int 21H jc point_error1 mov size. AX |
;....................................................................................................................................... установка указателя текущей позиции
;....................................................................................................................................... код установки в конец файла
;....................................................................................................................................... запись логического номера
;....................................................................................................................................... смещение - О
;....................................................................................................................................... смещение - О
;....................................................................................................................................... код прерывания
;....................................................................................................................................... если CF-1,- обработка ошибки установки указателя
;....................................................................................................................................... запись размера файла
Установка указателя в начало файла:
mov АН, 42Н mov AL, О mov CX, 0 mov DX, О Int 21H jc point_error2 ; если CF-1,- обработка ошибки установки указателя Чтение файла: mov АН, 3FH mov BX, han mov CX, size mov DX, offset buf Int 21H jc read_error ; если CF-1,- обработка ошибки чтения из файла |
;....................................................................................................................................... установка указателя текущей позиции код;............................................................................... установки в начало файла
смещение – О
смещение – О
;............................................................................ функция чтения из файла ;........................................................................... запись логического номера ; запись размера файла ;........................................................................... запись адреса буфера обмена ;........................................................................... код прерывания |
код прерывания
Закрытие файла:
mov BX. пап;........................................................................................................................... запись логического номера
mov АН, ЗЕН;..........................................................................................................................
функция закрытия файла
Int 21H;.............................................................................................. код прерывания
jc close_erro r
; если CF=1, - обработка ошибки закрытия файла
Запись в файл:
- Полная перезапись файла.
; Открытие (создание) файла
mov DX, offset path
mov CX, 0
mov АН, ЗСН
Int 21H
jc open_error
mov han. AX
; Запись в файл 500 байт
mov АН, 40Н
mov BX, han
mov CX, 500
mov DX, offset buf
Int 21H
jc write_error
- Добавление записей в файл.
; Открытие файла,
mov DX offset path
mov AL, 1
mov AH, 3DH
Int 21H
jc open_error
mov han, AX
; Установка указателя в конец файла
mov BX, AX
mov CX. 0
mov DX, О
mov AL, 2
mov АН. 42Н
Int 21H
jc point_error
; Запись в файл 300 байт
mov АН. 40Н
mov BX, han
mov CX. 300
mov DX. offset buf
Int 21H
jc write_error
Дата добавления: 2015-12-07; просмотров: 80 | Нарушение авторских прав