Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Int 21h ;Вызов dos

В случае проверки функция возвращает текущий атрибут файла в регистре

CX. В случае изменения функция устанавливает в соответствующем элементе

оглавления атрибут из регистра CX. Неправильная операция возвращает в

регистре AX коды ошибок 02, 03 или 05.

Получить текущее оглавление: шест.47

--------------------------------------

Определение текущего оглавления для любого дисковода осуществляется с

помощью функции шест.47. При этом необходимо определить область памяти

достаточно большую, чтобы содержать пути доступа максимальной длины и

загрузить адрес этой области в регистр DX. Регистр DL должен содержать

номер дисковода: 0 - текущий, 1 - A, 2 - B и т.д. В результате выполнения

операция помещает в область памяти имя текущей директории (без номера

дисковода), например, в следующем виде:

ASSEMBLE\EXAMPLES

Нулевой байт (шест.00) идентифицирует конец составного имени пути

доступа. Для корневой директории возвращаемое значение состоит только из

одного байта - шест.00. Таким образом можно получить текущее имя пути

доступа для любого файла в подоглавлении. Пример на рис.17.5 демонстрирует

использование данной функции.

__________________________________________________________________________

TITLE GETPATH (COM) Получить текущий каталог

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,ES:CODESG

ORG 100H

BEGIN: JMP SHORT MAIN

; -----------------------------------------------

PATHNAM DB 65 DUP(' ') ;Имя текущего пути доступа

; -----------------------------------------------

MAIN PROC NEAR

MOV AH,19H ;Определить текущий диск

INT 21H

ADD AL,41H ;Заменить шест.номер

MOV DL,AL ; на букву: 0=A, 1=B ...

CAL B10DISP ;Выдать номер дисковода,

MOV DL,':'

CAL B10DISP ; двоеточие,

MOV DL,'\'

CAL B10DISP ; обратную косую

MOV AH,47H ;Получить текущий каталог

MOV DL,00

LEA SI,PATHNAM

INT 21H

A10LOOP:

CMP BYTE PTR [SI],0 ;Конец имени пути доступа

JE A20 ; да - выйти

MOV AL,[SI] ;Выдать на экран

MOV DL,AL ; имя пути доступа

CALL B10DISP ; побайтно

INC SI

JMP A10LOOP

A20: RET ;Выход в DOS

MAIN ENDP

B10DISP PROC NEAR

MOV AH,02 ;в DL - адрес элемента

Int 21h ;Функция вывода на экран

RET

B10DISP ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.17.5. Получить текущий каталог.

Поиск файлов по шаблону: шест.4E и шест.4F

--------------------------------------------

Данные функции аналогичны функциям шест. 11 и 12 базовой версии DOS.

Функция 4E используется для начала поиска в оглавлении, а функция 4F - для

продолжения. Для начала поиска в регистр DX необходимо загрузить адрес

ASCIIZ-строки, содержащей имя пути доступа и шаблон поиска. Шаблон поиска

может включать в себя символы ? и *. В регистре CX должно быть значение

атрибута в любой комбинации битов (нормальный, оглавление, спрятанный или

системный).

MOV AH,4EH ;Запрос на начало поиска

MOV CX,00H ;Нормальный атрибут

LEA DX,PATHNM1 ;ASCIIZ-строка