Жанр: Учеба
Ассемблер и программирование для IBM PC
...озданию, записи и
закрытию дисковых файлов для расширенной версии 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, не имеют строк и поэтому рассматриваемая програ
...Поділитися у соцмережах