Жанр: Учеба

Ассемблер и программирование для IBM PC

сторінка №23

озданию, записи и
закрытию дисковых файлов для расширенной версии DOS.

Создание файла: Шест.3C
-------------------------
Для создания нового файла или переписывания старого файла
используется функция шест.3C. При этом регистр DX должен содержать адрес
ASCIIZ-строки, а регистр CX - необходимый атрибут. Байт атрибут был
рассмотрен в главе 15; для обычного файла значение атрибута - 0.
Рассмотрим пример создания обычного файла:

MOV AH,3CH ;Запрос на создание
MOV CX,00 ; обычного файла
LEA DX,PATHNM1 ;ASCIIZ строка
INT 21H ;Вызов DOS
JC error ;Переход по ошибке
MOV HANDLE1,AX ;Сохранение файлового номера в DW

При правильном открытии операция создает элемент оглавления с данным
атрибутом, очищает флаг CF и устанавливает файловый номер в регистре AX.
Этот номер должен использоваться для всех последующих операций. Если
создаваемый файл уже существует (т.е. имя файла присутствует в
оглавлении), то длина этого файла устанавливается в 0 для перезаписи.
В случае возникновения ошибки операция устанавливает флаг CF в 1 и
помещает в регистр AX код возврата: 03, 04 или 05 (см.табл.17.1). Код 05
свидетельствует либо о переполнении оглавления, либо о защите
существующего файла атрибутом "только чтение". При завершении операции
необходимо сначала проверить флаг CF, так как при создании файла возможна
установка в регистре AX файлового номера 0005, который можно легко спутать
с кодом ошибки 05 (нет доступа).

Запись файла: шест.40
-----------------------
Для записи файла используется функция DOS шест.40. При этом в
регистре BX должен быть установлен файловый номер, в регистре CX - число
записываемых байт, а в регистре DX - адрес области вывода. В следующем
примере происходит запись 256 байт из области OUTREC:

HANDLE1 DW ?
OUTREC DB 256 DUP (' ')
MOV AH,40H ;Запрос записи
MOV BX,HANDLE1 ;Файловый номер
MOV CX,256 ;Длина записи
LEA DX,OUTREC ;Адрес области вывода
INT 21H ;Вызов DOS
JC error2 ;Проверка на ошибку
CMP AX,256 ;Все байты записаны?
JNE error3

Правильная операция записывает из памяти на диск все данные (256
байт), очищает флаг CF и устанавливает в регистре AX число действительно
записанных байтов. Если диск переполнен, то число записанных байтов может
отличаться от заданного числа. В случае неправильной операции флаг CF
устанавливается в 1, а в регистр AX заносится код 05 (нет доступа) или 06
(ошибка файлового номера).

Закрытие файла: шест.3E
--------------------------
После завершения записи файла необходимо установить файловый номер в
регистр BX и, используя функцию DOS шест.3E, закрыть файл. Эта операция
записывает все оставшиеся еще данные из буфера на диск и корректирует
оглавление и таблицу FAT.

MOV AH,3EH ;Запрос на закрытие файла
MOV BX,HANDLE1 ;Файловый номер
INT 21H ;Вызов DOS

В случае ошибки в регистре AX устанавливается код 06 (неправильный
файловый номер).

ПРОГРАММА:ИСПОЛЬЗОВАНИЕ ФАЙЛОВОГО НОМЕРА ДЛЯ СОЗДАНИЯ ФАЙЛА.
________________________________________________________________

__________________________________________________________________________

page 60,132
TTILE HANCREAT (EXE) Создание файла на диске
; -----------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DW 80 DUP(?)
STACKSG ENDS
; -----------------------------------------------------
DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL BYTE ;Список параметров:
MAXLEN DB 30 ;
NAMELEN DB ? ;
NAMEREC DB 30 DUP(' '), 0DH, 0AH ; введенное имя, CR/LF для записи
ERRCDE DB 00
HANDLE DW ?
PATHNAM DB 'D:\NAMEFILE.DAT',0
PROMPT DB 'Name? '
ROW DB 01
OPNMSG DB '*** Open error ***', 0DH, 0AH
WRTMSG DB '*** Write error ***', 0DH, 0AH
DATASG ENDS
; -------------------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
MOV AX,0600H
CALL Q10SCR ;Очистка экрана
CALL Q20CURS ;Установка курсора
CALL C10CREA ;Создание файла, установка DTA
CMP ERRCDE,00 ;Ошибка при создании?
JZ A20LOOP ; да - продолжить,
RET ; нет - вернуться в DOS
A20LOOP:
CALL D10PROC
CMP NAMELEN,00 ;Конец ввода?
JNE A20LOOP ; нет - продолжить,
CALL G10CLSE ; да - закрыть файл
RET ; и выйти в DOS
BEGIN ENDP
; Создание файла на диске:
; -----------------------
C10CREA PROC NEAR
MOV AH,3CH ;Функция создания файла
MOV CX,00 ;Нормальный атрибут
LEA CX,PATHNAM
INT 21H
JC C20 ;Есть ошибка?
MOV HANDLE,AX ; нет - запомнить номер,
RET
C20: ; да -
LEA DX,OPNMSG ; выдать сообщение
CALL X10ERR ; об ошибке
RET
C10CREA ENDP
; Ввод с клавиатуры:
; -----------------
D10PROC PROC NEAR
MOV AH,40H ;Функция вывода на экран
MOV BX,01 ;Номер (Handle)
MOV CX,06 ;Длина текста запроса
LEA DX,PROMPT ;Выдать запрос
INT 21H

MOV AH,0AH ;Функция ввода с клавиатуры
LEA DX,NAMEPAR ;Список параметров
INT 21H
CMP NAMELEN,00 ;Имя введено?
JNE D20 ; да - обойти
RET ; нет - выйти
D20:
MOV AL,20H ;Пробел для заполнения
SUB CH,CH
MOV CL,NAMELEN ;Длина
LEA DI,NAMEREC ;
ADD DI,CX ;Адрес + длина
NEG CX ;Вычислить
ADD CX,30 ; оставшуюся длину
REP STOSB ;Заполнить пробелом
D90:
CALL F10WRIT ;Запись на диск
CALL E10SCRL ;Проверка на скроллинг
RET
D10PROC ENDP
; Проверка на скроллинг:
; ---------------------
E10SCRL PROC NEAR
CMP ROW,18 ;Последняя строка экрана
JAE E10 ; да - обойти,
INC ROW ; нет - увеличить строку
JMP E10
E10:
MOV AX,0601H ;Продвинуть на одну строку
CALL Q10SCR
E90: CALL Q20CURS ;Установка курсора
RET
E10SCRL ENDP
; Запись на диск:
; --------------
F10WRIT PROC NEAR
MOV AH,40H ;Функция записи на диск
MOV BX,HANDLE
MOV CX,32 ;30 для имени + 2 для CR/LF
LEA DX,NAMEREC
INT 21H
JNC F20 ;Ошибка записи?

LEA DX,WRTMSG ; да -
CALL X10ERR ; выдать предупреждение
MOV NAMELEN,00
F20:
RET
F10WRIT ENDP
; Закрытие файла на диске:
; -----------------------
G10CLSE PROC NEAR
MOV NAMEREC,1AH ;Маркер конца записи (EOF)
CALL F10WRIT
MOV AH,3EH ;Функция закрытия
MOV BX,HANDLE
INT 21H
RET
G10CLSE ENDP
; Прокрутка (скроллинг) экрана:
; ----------------------------
Q10SCR PROC NEAR ;в AX - адрес элемента
MOV BH,1EH ;Цвет - желтый на синем
MOV CX,0000
MOV DX,184FH
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 ?
INPREC DB 512 DUP (' ')
MOV AH,3FH ;Запрос на чтение
MOV BX,HANDLE2 ;Файловый номер
MOV CX,512 ;Длина записи
LEA DX,INPREC ;Адрес области ввода
INT 21H ;Вызов DOS
JC error5 ;Проверка на ошибку
CMP AX,00 ;Прочитано 0 байтов?
JE endfile

Правильно выполненная операция считывает запись в память, сбрасывает
флаг CF и устанавливает в регистре AX число действительно прочитанных
байтов. Нулевое значение в регистре AX обозначает попытку чтения после
конца файла. Ошибочная операция устанавливает флаг CF и возвращает в
регистре AX код ошибки 05 (нет доступа) или 06 (ошибка файлового номера).
Так как DOS ограничивает число одновременно открытых файлов, то
программа, успешно отработавшая с несколькими файлами, должна закрывать
их.

ПРОГРАММА: ИСПОЛЬЗОВАНИЕ ФАЙЛОВОГО НОМЕРА ДЛЯ ЧТЕНИЯ ФАЙЛА
________________________________________________________________

__________________________________________________________________________

page 60,132
TITLE HANREAD (EXE) Чтение записей, созданных в HANCREAT
; -----------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
DW 80 DUP(?)
STACKSG ENDS
; -----------------------------------------------------
DATASG SEGMENT PARA 'Data'
ENDCDE DB 00
HANDLE DW ?
IOAREA DB 32 DUP(' ')
PATHNAM DB 'D:\NAMEFILE.SRT',0
OPENMSG DB '*** Open error ***', 0DH, 0AH
READMSG DB '*** Read error ***', 0DH, 0AH
ROW DB 00
DATASG ENDS
; ------------------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
MOV AX,0600H
CALL Q10SCR ;Очистить экран
CALL Q20CURS ;Установить курсор
CALL E100PEN ;Открыть файл,
; ; установить DTA
CMP ENDCDE,00 ;Ошибка открытия?
JNZ A90 ; да - завершить программу
A20LOOP:
CALL F10READ ;Чтение записи с диска
CMP ENDCDE,00 ;Ошибка чтения?
JNZ A90 ; да - выйти,
CALL G10DISP ; нет - выдать имя,
JMP A20LOOP ; и продолжить
A90: RET
BEGIN ENDP
; Открытие файла:
; --------------
E100PEN PROC NEAR
MOV AH,3DH ;Функция открытия
MOV CX,00 ;Нормальные атрибуты
LEA DX,PATHNAM
INT 21H
JC E20 ;Ошибка открытия?
MOV HANDLE,AX ; нет - сохранить
RET ; файловый номер
E20:
MOV ENDCDE,01 ; да - выдать
LEA DX,OPENMSG ; сообщение об ошибке
CALL X10ERR
RET
E100PEN ENDP
; Чтение дисковой записи:
; ----------------------
F10READ PROC NEAR
MOV AX,3FH ;Функция чтения
MOV BX,HANDLE
MOV CX,32 ;30 для имени, 2 для CR/LF
LEA DX,IOAREA
INT 21H
JC F20 ;Ошибка при чтении?
CMP AX,00 ;Конец файла?
JE F30
CMP IOAREA,1AH ;Маркер конца файла (EOF)?
JE F30 ; да - выйти
RET
F20:
LEA DX,READMSG ; нет - выдать
CALL X10ERR ; сообщение об ошибке
F30:
MOV ENDCDE,01 ;Код завершения
F90: RET
F10READ ENDP
; Вывод имени на экран:
; --------------------
G10DISP PROC NEAR
MOV AH,40H ;Функция вывода на экран
MOV BX,01 ;Установить номер
MOV CX,32 ; и длину
LEA DX,IOAREA
INT 21H
CMP ROW,20 ;Последняя строка экрана?

JEA G90 ; да - обойти
INC ROW
RET
G90:
MOV AX,0601H
CALL Q10SCR ;Прокрутка (скроллинг)
CALL Q20CURS ;Установить курсор
RET
G10DISP ENDP
; Прокрутка (скроллинг) экрана:
; ----------------------------
Q10SCR PROC NEAR ;в AX - адрес элемента
MOV BH,1EH ;Установить цвет
MOV CX,0000
MOV DXX,184FH ;Функция прокрутки
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
MOV AH,40H ;в DX - адрес сообщения
MOV BX,01 ;Номер
MOV CX,20 ;Длина сообщения
INT 21H
RET
X10ERR ENDP

CODESG ENDS
END BEGIN
__________________________________________________________________________

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

На рис.17.3 приведена программа, которая читает файл, созданный
предыдущей программой (см.рис.17.2) и отсортированный командой DOS SORT.
Для открытия файла используется функция шест.3D. Полученный в результате
файловый номер заносится в поле HANDLE и используется затем в функции
шест.3F для чтения файла.
В программе нет необходимости переносить курсор на новую строку, так
как записи содержат в конце символы "возврат каретки" и "новая строка".

ASCII-ФАЙЛЫ (ФАЙЛЫ В ФОРМАТЕ ASCII)
________________________________________________________________

В предыдущих примерах были показаны операции создания и чтения
файлов. Аналогичным образом можно обрабатывать ASCII-файлы (текстовые
файлы), созданные DOS или редактором. Для этого необходимо знать
организацию оглавления и таблицы FAT, а также способ записи данных в
сектор диска, используемый системой. Система DOS записывает, например,
ASM-файл в точном соответствии с вводом с клавиатуры, включая символы
табуляции (шест.09), возврат каретки (шест.OD) и конец строки (шест.OA).
Для экономии дисковой памяти DOS не записывает пробелы, которые находятся
на экране и предшествуют символу табуляции, и пробелы, находящиеся в
строке справа от символа "возврат каретки". Следующий пример иллюстрирует
ассемблерную команду, как она может выглядеть на экране:

"tab"MOV"tab"AH,09"return"

Для такой строки содержимое ASCII-файла будет:

094D4F560941482C30390D0A

Когда программа TYPE или редактор читают файл и выводят на экран
символы "табуляция", "возврат каретки" и "конец строки" автоматически
выравнивают данные.

Рассмотрим программу, приведенную на рис.17.4, которая читает и
выводит на экран файл HANREAD.ASM (пример на рис. 17.3) по секторам. Если
программа HANREAD уже введена и проверена, то можно просто скопировать ее
в файл с новым именем.

__________________________________________________________________________

page 60,132
TITLE ASCREAD (COM) Чтение ASCII файла
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG
ORG 100H
BEGIN: JMP MAIN
; -------------------------------------------------
SECTOR DB 512 DUP(' ') ;Область ввода
DISAREA DB 120 DUP(' ') ;Область вывода на экран
ENDCDE DW 00
HANDLE DW 0
OPENMSG DB '*** Open error ***'
PATHNAM DB 'D:\HANREAD.ASM', 0
ROW DB 00
; -------------------------------------------------
MAIN PROC NEAR ;Основная программа
MOV AX,0600H
CALL Q10SCR ;Очистить экран
CALL Q20CURS ;Установить курсор
CALL E10OPEN ;Открыть файл,
; установить DTA
CMP ENDCDE,00 ;Ошибка при открытии?
JNE A90 ; да - выйти,
A20LOOP: ; нет - продолжить
CALL R10READ ;Чтение первого сектора
CMP ENDCDE,00 ;Конец файла, нет данных?
JE A90 ; да - выйти
CALL G10XPER ;Выдать на экран
A90: RET ;Завершить программу
MAIN ENDP
; Открыть файл на диске:
; ---------------------
E10OPEN PROC NEAR
MOV AH,3DH ;Функция открытия
MOV AL,00 ;Только чтение
LEA DX,PATHNAM
INT 21H
JNC E20 ;Проверить флаг CF
CALL X10ERR ; ошибка, если установлен
RET
E20:
MOV HANDLE,AX ;Запомнить номер файла
RET
E10OPEN ENDP
; Построчный вывод данных на экран:
; --------------------------------
G10XPER PROC NEAR
CLD ;Направление слева-направо
LEA SI,SECTOR
G20:
LEA DI,DISAREA
G30:
LEA DX,SECTOR+512
CMP SI,DX ;Конец сектора?
JNE G40 ; нет - обойти,
CALL R10READ ; да - читать следующий
CMP ENDCDE,00 ;Конец файла?
JE G80 ; да - выйти
LEA SI,SECTOR
G40:
LEA DX,DISAREA+80
CMP DI,DX ;Конец DISAREA?
JB G50 ; нет - обойти,
MOV [DI],0D0AH ; да - установить CR/LF
CALL H10DISP ; и выдать на экран
LEA DI,DISAREA
G50:
LODSB ;Загрузить [SI] в AL
; и увеличить SI
STOSB ;Записать AL в [DI]
; и увеличить DI
CMP AL,1AH ;Конец файла?

JE G80 ; да - выйти
CMP AL,0AH ;Конец строки?
JNE G30 ; нет - повторить цикл,
CALL H10DISP ; да - вывести на экран
JMP G20
G80:
CALL H10DISP ;Вывести последнюю строку
G90: RET
G10XPER ENDP
; Вывод строки на экран:
; ---------------------
H10DISP PROC NEAR
MOV AH,40H ;Функция вывода на экран
MOV BX,01 ;Номер (Handle)
LEA CX,DISAREA ;Вычислить
NEG CX ; длину
ADD CX,DI ; строки
LEA DX,DISAREA
INT 21H
CMP ROW,22 ;Последняя строка экрана?
JAE H20 ; нет - выйти
INC ROW
JMP H90
H20:
MOV AX,0601H ;Прокрутка (скроллинг)
CALL Q10SCR
CALL Q20CURS
H90: RET
H10DISP ENDP
; Чтение дискового сектора:
; ------------------------
R10READ PROC NEAR
MOV AH,3FH ;Функция чтения
MOV BX,HANDLE ;Устройство
MOV CX,512 ;Длина
LEA DX,SECTOR ;Буфер
INT 21H
MOV ENDCDE,AX
RET
R10READ ENDP
; Прокрутка (скроллинг) экрана:
; ----------------------------
Q10SCR PROC NEAR ;в AX адрес элемента
MOV BH,1EH ;Установить цвет
MOV CX,0000 ;Прокрутка
MOV DX,184FH
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
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, не имеют строк и поэтому рассматриваемая програ

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.