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

X10err proc near

MOV AH,40H ;Функция вывода на экран

MOV BX,01 ;Номер устройства

MOV CX,18 ;Длина

LEA DX,OPENMSG

INT 21H

MOV ENDCDE,O1 ;Индикатор ошибки

RET

X10err endp

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.17.4. Чтение ASCII-файла.

Программа выполняет в основном те же функции, что и DOS TYPE, т.е.

выводит на экран каждую запись до символов "возврат каретки" и "конец

строки" (CR/LE). Прокрутка содержимого экрана (скроллинг) вызывает

некоторые проблемы. Если в программе не будет предусмотрено специальной

проверки на конец экрана, то вывод новых строк будет осуществляться поверх

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

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

контролировать достижение конца экрана. Так как строки ASCII-файла имеют

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

выводить ее на экран.

Рассматриваемая программа считывает полный сектор данных в область

SECTOR. Процедура G10XFER передает данные побайтно из области SECTOR в

область DISAREA, откуда они будут выдаваться на экран. При обнаружении

символа "конец строки", процедура выводит на экран содержимое DISAREA,

включая "конец строки". (Экран дисплея принимает также символы табуляции

(шест.09) и автоматически устанавливает курсор в следующую справа позицию

кратную 8).

В программе необходимо проверять конец сектора (для считывания

следующего) и конец области вывода. Для стандартных ASCII-файлов, таких

как ASM-файлы, каждая строка имеет относительно короткую длину и

гарантировано завершается парой символов CR/LF. Нетекстовые файлы, такие

как EXE или OBJ, не имеют строк и поэтому рассматриваемая программа должна

проверять достижение конца области DISAREA во избежание разрушения. Хотя

программа предназначена для вывода на экран только ASCII-файлов, она имеет

проверку для страховки от всяких неожиданных несимвольных файлов.

Процедура G10XFER выполняет следующее:

1. Инициализирует адрес области SECTOR.

2. Инициализирует адрес области DISAREA.

3. При достижении конца области SECTOR считывает следующий сектор. В

случае конца файла, завершает работу программы, иначе инициализирует

адрес области SECTOR.

4. При достижении конца области DISAREA вставляет символы CR/LF, выводит

строку на экран и инициализирует адрес DISAREA.

5. Переписывает символ из области SECTOR в область DISAREA.

6. По символу "конец файла" (шест.1A) завершает работу программы.

7. По символу "конец строки" (шест.OA) выводит на экран строку и

переходит на п.2, по другим символам идет на п.3.

Попробуйте выполнить эту программу в отладчике DEBUG. При каждом

вводе с диска просмотрите содержимое области ввода и обратите внимание на

то, как DOS форматирует записи. Для улучшения данной программы организуйте

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

ДРУГИЕ ДИСКОВЫЕ ФУНКЦИИ В РАСШИРЕННОЙ ВЕРСИИ DOS

________________________________________________________________

Получение размера свободного дискового пространства: шест.36

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

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

функции необходимо загрузить в регистр DL номер дисковода (0 - текущий

дисковод, 1 - A, 2 - B и т.д.):

MOV AH,36H ;Запрос на

MOV DL,0 ; текущий дисковод