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

Int 21h ;Вызов dos

Операция возвращает в регистр AL число дисководов (независимо от

типа). Так как для DOS необходимо по крайней мере 2 логических дисковода A

и B, то DOS возвращает значение 02 и для систем с одним дисководом. (Для

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

11H).

Поиск элементов оглавления: шест.11 и 12

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

Программной утилите может потребоваться поиск в оглавлении для

доступа к имени файла, например, при удалении или переименовании. Для

доступа к первому или единственному элементу оглавления необходимо

загрузить в регистр DX адрес неоткрытого блока FCB и выполнить функцию

11H. При использовании расширенного блока fcb можно также получить код

атрибута (см.техническое руководство по DOS).

MOV AH,11H ;Запрос на первый элемент

LEA DX,FCBname ;Неоткрытый FCB

Int 21h ;Вызов dos

FCB может быть расположено по адресу 5CH в префиксе программного

сегмента, предшествующем программе в памяти (DTA по умолчанию). Подробно

см. гл.22.

В регистре AL операция возвращает шест.FF, если элемент не найден, и

шест.00, если найден. Операция устанавливает в DTA номер дисковода (1=A,

2=B и т.д.) имя файла и тип файла.

Если найдено несколько элементов при выборке по шаблону (например,

*.ASM), то для локализации элементов подмножества директории используется

функция 12H:

MOV AH,12H ;Запрос следующего элемента

LEA DX,FCBname ;Неоткрытый FCB

Int 21h ;Вызов dos

Коды возврата в регистре AL аналогичны кодам функции 11H.

Удаление файла: шест.13

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

Для удаления файла в программе используется функция DOS 13H. Операция

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

оглавлении.

MOV AH,13H ;Запрос на удаление файла

LEA DX,FCBname ;Неоткрытый FCB

Int 21h ;Вызов dos

Если операция находит и удаляет элемент, то в регистре AL

устанавливается код возврата 00, иначе код равен шест.FF.

Переименование файла: шест.17

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

Для переименования файла в программе используется функция DOS

шест.17. Старое имя файла записывается в обычном месте блока FCB, а новое

- начиная со смещения 16.

MOV AH,17H ;Запрос на переименование

LEA DX,FCBname ;Адрес FCB

Int 21h ;Вызов dos

Символы ? и * в новом имени приводят к сохранению в соответствующих

позициях символов из старого имени. Успешная операция устанавливает в

регистре AL код возврата 00, а безуспешная (файл по старому имени не

найден или по новому имени уже существует) - код FF.

Получение текущего номера дисковода: шест.19

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

Функция DOS шест.19 позволяет определить текущий номер дисковода:

MOV AH,19H ;Получить текущий дисковод

Int 21h ;Вызов dos

Операция возвращает шест. номер дисковода в регистре AL (0=A, 1=B и

т.д.). Полученное значение можно поместить непосредственно в FCB для

доступа к файлу с текущего дисковода.

Кроме перечисленных существуют функции для получения информации из

таблицы FAT (1B и 10), установки поля прямой записи (24), установки

вектора прерываний (25), создания нового программного сегмента (26) и

анализа имени файла (29). Эти функции описаны в техническом руководстве по

DOS.

ПРОГРАММА: ВЫБОРОЧНОЕ УДАЛЕНИЕ ФАЙЛОВ

________________________________________________________________

__________________________________________________________________________

TITLE SELDEL (COM) Выборочное удаление файлов

; Предполагается текущий дисковод;

; Примеры параметров: *.*, *.BAK, и т.д.

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG

ORG 100H

BEGIN JMP MAIN

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

TAB EQU 09

LF EQU 10

CR EQU 13

CRLF DB CR,LF,'$'

DELMSG DB TAB,'Erase','$'

ENDMSG DB CR,LF,'No more directory entries',CR,LF,'$'

ERRMSG DB 'Write protected disk','$'

PROMPT DB 'y = Erase, N = Keep, Ret = Exit',CR,LF,'$'

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

MAIN PROC NEAR ;Главная процедура

MOV AH,11H ;Найти первый элемент

CALL D10DISK

CMP AL,0FFH ;Если нет элементов,

JE A90 ; то выйти

LEA DX,PROMPT ;Текст запроса

CALL B10DISP

A20:

LEA DX,DELMSG ;Выдать сообщение

CALL B10DISP ; об удалении файла

MOV CX,11 ;11 символов

MOV SI,81H ;Начало имени файла

A30:

MOV DL,[SI] ;Текущий символ

CALL C10CHAR ; для вывода на экран