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

Inc si ;Следующий символ

LOOP A30

MOV DL,'?'

CALL C10CHAR

MOV AH,01 ;Получить односимвольный

Int 21h ; ответ

CMP AL,ODH ;Символ Return?

JE A90 ; да - выйти

OR AL,00100000B ;Перекодировать

; в прописную букву

CMP AL,'y' ;Запрошено удаление?

JNE A50 ; нет - обойти,

MOV AH,13H ; да - удалить файл

MOV DX,80H

INT 21H

CMP AL,0 ;Успешное удаление?

JZ A50 ; да - обойти

LEA DX,ERRMSG ; нет - выдать

CALL B10DISP ; предупреждение

JMP A90

A50:

LEA DX,CRLF ;Перевести строку на экране

CALL B10DISP

MOV AH,12H

CALL B10DISK ;Получить следующий элемент

CMP AL,0FFH ;Есть еще?

JNE A20 ; да - повторить

A90:

RET ;Выход в DOS

MAIN ENDP

; Вывод строки на экран;

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

B10DISP PROC NEAR ;в DX находится адрес

MOV AH,09 ; строки

INT 21H

RET

B10DISP ENDP

; Вывод символа на экран;

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

C10CHAR PROC NEAR ;в DL находится символ

MOV AH,02

INT 21H

RET

C10CHAR ENDP

; Чтение элемента каталога:

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

D10DISK PROC NEAR

MOV DX,5CH ;Установить FCB

INT 21H

CMP AL,0FFH ;Есть еще элементы?

JNE D90

PUSH AX ;Сохранить AL

LEA DX,ENDMSG

CALL B10DISP

POP AX ;Восстановить AL

D90: RET

D10DISK ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.16.5. Выборочное удаление файлов.

На рис.16.5 приведена COM-программа по имени SDEL, иллюстрирующая

функции DOS 11H, 12H и 13H для удаления выбранных файлов. Для запроса на

удаление файлов пользователь может ввести,например, следующие команды:

SDEL *.* (все файлы)

SDEL *.BAK (все BAK-файлы)

SDEL TEST.* (все файлы по имени TEST)

Посредством DOS программа определяет в оглавлении элементы,

удовлетворяющие запросу. DOS заносит полное имя найденного элемента в PSP

(префикс программного сегмента) по смещению шест.81 (DTA по умолчанию).

Затем программа выводит на экран имя файла и запрос подтверждения. Ответ Y

(да) разрешает удаление, N (нет) сохраняет файл, а Return завершает

выполнение.

Обратите внимание на то, что данная программа должна быть создана как

COM-программа, так как EXE-программа требуют отличной адресации для

использования смещений шест.5С и 81 в PSP. Для тестирования программы

используйте скопированные временно файлы.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Программа, использующая INT 21H в базовой версии DOS для операций

ввода-вывода на диск, должна содержать блок управления файлом (FCB) для

каждого доступного файла.

- Один блок содержит 128 записей. Номер текущего блока и номер

текущей записи в FCB указывают на дисковую запись, которая должна быть

обработана.

- В обратной последовательности байт в FCB записываются следующие

элементы: номер текущего блока, размер записи, размер файла и

относительный номер записи.

- Все программы, обрабатывающие один и тот же файл, должны иметь

одинаково описанный блок FCB.

- Область ввода-вывода (DTA) определяется адресом памяти, куда должна

быть помещена запись при чтении или откуда она заносится на диск. Прежде,

чем выполнить операцию записи или чтения, в программе необходимо

установить каждую область DTA.

- Операция открытия файла устанавливает в блоке FCB значения для

следующих элементов: имя файла, тип файла, размер записи (шест.80), размер

файла и дата. Программа должна заменить размер записей на правильное

значение.

- Программа, использующая для записи файла операцию DOS INT 21H,

должна закрыть файл в конце обработки для того, чтобы поместить на диск

все оставшиеся в буфере записи (если таковые имеются) и скорректировать

соответствующий элемент оглавления.

- При использовании для чтения и записи операции DOS INT 21H система

автоматически изменяет текущий номер записи в FCB.

- Операция чтения по прерыванию DOS INT 21H проверяет наличие

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

диска.

- Прямой метод доступа требует указания номера записи в поле

относительного номера записи блока FCB.

- Восемь байт (двойное слово) относительного номера записи кодируются

в обратной последовательности байт.

- Если требуемая запись при прямом доступе уже находится в буфере, то

система передает ее непосредственно в DTA. В противном случае выполняется

чтение с диска в буфер всего сектора, содержащего необходимую запись.

- Операции прямого блочного чтения и записи более эффективны при

наличии достаточной памяти. Эти операции особенно удобны для загрузки

таблиц.

- Команды DOS INT 25H и 26H осуществляют дисковые операции

абсолютного чтения и записи, но не поддерживают обработку оглавления, не

определяют конец файла и не обеспечивают блокирование и деблокирование

записей.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

16.1. Напишите функции базовой версии DOS для следующих операций: а)

создание файла, б) установка DTA, в) последовательная запись, г) открытие

файла, д) последовательное чтение.

16.2. Программа использует размер записи, устанавливаемый при

открытии файла по умолчанию. а) Сколько записей содержит один сектор? б)

Сколько записей содержит дискета с тремя дорожками по девять секторов на

каждой? в) Если на дискете (б) находится один файл, то при

последовательном чтении сколько произойдет физических обращений к диску?

16.3. Напишите программу, которая создает дисковый файл, содержащий

записи из трех элементов: номер товара (пять символов), наименование

товара (12 символов) и стоимость единицы товара (одно слово). Ввод этих

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

преобразовать числа из ASCII представления в двоичное представление.

16.4. Напишите программу, которая выводит на экран файл, созданный в

вопросе 16.3.

16.5. Определите текущий блок и запись для следующих номеров записей

при прямом доступе: а)45, б)73, в)150, г)260.

16.6. В каком виде номер записи 2652 (десятичное) устанавливается в

поле относительной записи блока FCB?

16.7. Укажите шестнадцатеричные номера функций для следующих

операций: а) прямая запись, б) прямое чтение, в) прямая блочная запись, г)

прямое блочное чтение.

16.8. Напишите команды для определения числа записей файла,

предполагая, что операция открытия уже выполнена. Имена полей с размером

файла FCB FLSZ и размером записи FCB FCSZ.

16.9. Используя программу из вопроса 16.4 для создания файла с

количеством, ценами и наименованиями товаров, сформируйте файл с

приведенными ниже данными. Напишите программу, которая выполняет одно

блочное чтение данного файла и выводит каждую запись на экран.

Номер Цена Наименование

023 00315 Ассемблеры

024 00430 Компоновщики

027 00525 Компиляторы

049 00920 Компрессоры

114 11250 Экстракторы

117 00630 Буксиры

122 10520 Лифты

124 21335 Процессоры

127 00960 Станки для наклеивания меток

232 05635 Черпатели?

999 00000

16.10. Измените программу из вопроса 16.9 так, чтобы цены

записывались на диск в двоичном формате.

16.11. Измените программу из вопроса 16.9 так, чтобы а)

использовалась операция прямого чтения, б) пользователь мог вводить номер

и количество товара и в) выполнялось вычисление и вывод на экран стоимости

(произведение количества товара на стоимость единицы товара).