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

Int 10h ;Скроллинг

RET

Q10SCR ENDP

; Установка курсора:

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

Q20CURS PROC NEAR

MOV AH,02

MOV BH,00

MOV DH,ROW ;Установить курсор

MOV DL,00

INT 10H

RET

Q20CURS ENDP

; Вывод сообщения об ошибке:

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

X10err proc near ;dx содержит

MOV AH,40H ; адрес сообщения

MOV BX,01

MOV CX,21 ;Длина сообщения

INT 21H

MOV ERRCDE,01 ;Установить код ошибки

RET

X10err endp

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.17.2. Использование файлового номера для создания файла.

Программа, приведенная на рис.17.2, создает файл по имени, которое

вводится пользователем с клавиатуры. В программе имеются следующие

основные процедуры:

C10CREA Использует функцию шест.3C для создания файла и сохраняет

файловый номер в элементе данных по имени HANDLE.

D10PROC Принимает ввод с клавиатуры и очищает пробелом байты от конца

введенного имени до конца области ввода.

F10WRIT Записывает файл, используя функцию шест.40.

G10CLSE В завершении обработки, используя функцию шест.3E,закрывает файл

для того, чтобы создать правильный элемент оглавления.

Область ввода имеет длину 30 байтов и завершается двумя байтами:

возврат каретки (шест.0DH) и конец строки (шест.0AH). Таким образом общая

длина области ввода - 32 байта. Программа переносит на диск 32-x байтовые

записи, как записи фиксированной длины. Можно опустить байты "возврат

каретки" и "конец строки", но включить их, если потребуется сортировка

файла. Программа DOS SORT требует наличия этих байтов для индикации конца

записей. Для нашего примера команда SORT может выглядеть следующим

образом:

SORT B:<NAMEFILE.DAT >NAMEFILE.SRT

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

возрастающей последовательности будут помещены в файл NAMEFILE.SRT.

Программа, приведенная на рис.17.3 выполняет чтение записей из файла

NAMEFILE.SRT и вывод их на экран. Обратите внимание на два момента: 1)

Символы возврат каретки и конец строки включены в конце каждой записи

только для выполнения сортировки и в других случаях могут быть опущены. 2)

Записи могут иметь переменную длину (по длине вводимых с клавиатуры имен);

эта особенность включает некоторое дополнительное программирование, как

это будет показано на рис.17.4.

ЧТЕНИЕ ДИСКОВОГО ФАЙЛА

________________________________________________________________

В следующих разделах раскрыты требования для открытия и чтения

дисковых файлов в расширенной версии DOS.

Открытие файла: шест.3D

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

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

необходимо открыть его, используя функцию шест.3D. Эта операция проверяет

правильность имени файла и его наличие на диске. При открытии регистр DX

должен содержать адрес необходимой ASCIIZ-строки, а регистр AL - код

доступа:

0 Открыть файл только для ввода

1 Открыть файл только для вывода

2 Открыть файл для ввода и вывода

Остальные биты регистра AL используются для разделения файлов DOS версии

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

для записи файла используется функция создания (шест.3C), но не функция

открытия файла. Ниже приведен пример открытия файла для чтения:

MOV AH,3DH ;Запрос на открытие

MOV AL,00 ;Только чтение

LEA DX,PATHNM1 ;Строка в формате ASCIIZ

INT 21H ;Вызов DOS

JC error4 ;Выход по ошибке

MOV HANDLE2,AX ;Сохранение номера в DW

Если файл с необходимым именем существует, то операция открытия

устанавливает длину записи равной 1, принимает существующий атрибут,

сбрасывает флаг CF и заносит файловый номер в регистр AX. Файловый номер

используется в дальнейшем для всех последующих операций.

Если файл отсутствует, то операция устанавливает флаг CF и заносит в

регистр AX код ошибки: 02, 04, 05 или 12 (см. рис.17.1). Не забывайте

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

регистре AX файловый номер 0005, что легко можно спутать с кодом ошибки 05

(нет доступа).

Чтение файла: Шест.3F

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

Для чтения записей файла используется функция DOS шест.3F. При этом

необходимо установить в регистре BX файловый номер, в регистре CX - число

байтов и в регистре DX - адрес области ввода. В следующем примере

происходит считывание 512-байтовой записи:

HANDLE2 DW ?