Жанр: Учеба
Справочник программиста на IBM PC
...прерывания 21H открывает существующий файл. Вы
должны сначала создать управляющий блок файла, как показано в
[5.3.5]. Перед открытием FCB должен содержать только имя файла и
имя накопителя (0 = по умолчанию, 1 = A и т.д.). DS:DX должны
указывать на FCB, а затем надо выполнить функцию. При возврате AL
будет содержать 0, если файл успешно открыт и FF, если файл не
найден. Если для указания накопителя используется 0, то он будет
заменен на код, соответствующий накопителю по умолчанию.
Только после того как файл открыт Вы должны установить размер
записи (по умолчанию - 128 байт), а также поля записи прямого
доступа и текущей записи (они обсуждаются в разделе, относящемся
к операциям с последовательным и прямым доступом). При открытии
поле текущего блока заполняется нулем, а поля даты и времени
информацией из каталога.
Чтобы закрыть файл с помощью метода FCB, надо установить DS:DX
на открытый FCB и вызвать функцию 10H прерывания 21H. При удаче
информация о размере файла, дате и времени будет записана в каталог,
а в AL будет возвращен 0. Однако если имя файла не будет
обнаружено в каталоге или оно будет найдено в другой позиции, то
изменения на диске будут индицированы возвратом FF в AL.
;---в сегменте данных
FCB DB 1,'FILENAMEEXT',25 DUP(0)
;---открытие файла
MOV AH,0FH ;номер функции
LEA DX,FCB ;DS:DX указывают на FCB
INT 21H ;открываем файл
CMP AL,0 ;проверка на ошибку
JNE OPEN_ERROR ;на обработку ошибки
;---закрытие файла
MOV AH,10H ;номер функции
LEA DX,FCB ;DS:DX указывают на FCB
INT 21H ;закрываем файл
CMP AL,0 ;проверка на ошибку
JNE CLOSE_ERROR ;на обработку ошибки
Метод дескриптора файла:
Для открытия файлов используйте функцию 3DH прерывания 21H.
DS:DX должны указывать на строку, дающую путь и имя файла, включая
имя нкакопителя, если это необходимо. Вся строка должна быть
не длиннее 63-х байтов и завершаться символом ASCII 0. В AL надо
поместить код доступа, причем 0 открывает файл для чтения, 1 -
для записи, а 2 - для чтения/записи. При возврате AX будет содержать
16-битный номер файла, по которому файл впоследствии идентифицируется.
Файловый указатель устанавливается на начало файла.
Размер записи устанавливается равным 1 байту - это связано с тем,
что операции прямого доступа при использовании метода дескриптора
файла не имеют специальных буферов: на самом деле файлы с прямым
доступом рассматриваются как последовательные и с ними работают
одни и те же функции. Эта функция позволяет открывать как обычные,
так и спрятанные файлы. При возврате флаг переноса равен 0,
если файл открыт успешно. В противном случае флаг переноса устанавливается,
а AX содержит 2 - если файл не найден, 4 - если
программа хочет открыть слишком много файлов, 6 - при ошибке на
диске и 12 - если неправильно указан код доступа в AL. Вот пример:
;---в сегменте данных
PATH DB 'A:LEVEL1\FILENAME.EXT',0
;---открываем файл для чтения/записи
MOV AH,3DH ;номер функции
MOV AL,2 ;открываем для чтения/записи
LEA DX,PATH ;DS:DX указывают на путь
INT 21H ;открываем файл
JC OPEN_ERROR ;уход на обработку ошибок
MOV HANDLE,AX ;сохраняем номер файла
Функция 3EH прерывания 21H закрывает файл, открытый методом
дескриптора файла. Надо просто поместить номер файла в BX и выполнить
функцию. При возврате флаг переноса равен 0, если все в
порядке, иначе он равен 1, а AX = 6, если указан неверный номер
файла.
;---закрытие файла
MOV AH,3EH ;номер функции
MOV BX,HANDLE ;номер файла
INT 21H ;закрываем файл
JC CLOSE_ERROR ;уход на обработку ошибки
Функция 45H прерывания 21H создает второй дескриптор файла из
существующего открытого дескриптора. В BX должен быть указан
существующий номер, а в AX будет возвращен новый. Функция 46H
прерывания 21H связывает второй дескриптор (помещаемый в CX) с
открытым файлом (номер которого в BX) таким образом, что первый
будет относиться к тому же файлу и устройству, что и последний.
5.3.4 Переименование файла; изменение позиции файла в каталоге.
Переименование файла может заключаться лишь в изменении первых
11-ти символов элемента каталога. Однако в древовидном каталоге
весь элемент каталога может быть перенесен в другой подкаталог,
переопределяя тем самым путь к файлу. Одна команда может как
переименовать файл, так и перенести его в другой каталог.
Высокий уровень.
В Бейсике файл переименовывается командой NAME. С помощью этой
команды он может быть также перенесен в другой каталог. Напишите
сначала существующее имя, а затем новое имя файла, оба заключенные
в кавычки, например NAME "OLDFILE.EXT" AS "NEWFILE.EXT". В
этом случае будет переименован файл в корневом каталоге. Для
изменения имен файлов, расположенных в подкаталогах, могут быть
использованы пути к файлу. Например, NAME "B:LEVEL1\OLDFILE.EXT"
AS "B:LEVEL1\NEWFILE.EXT" изменяет имя файла в подкаталоге LEVEL1.
Отметим, что для нового имени файла должен быть указан полный
путь. Если Вы запишете NAME "B:LEVEL1\OLDFILE.EXT" AS "NEWFILE.EXT",
то файл будет не только переименован, но и перенесен в
корневой каталог. Для переноса файла из одного подкаталога в
другой без изменения его имени напишите команду NAME "A:SUBDIR1\OLDFILE.EXT"
AS "A:SUBDIR2\OLDFILE.EXT". Таким методом нельзя
перенести файл с диска на диск. Поскольку файлы, расположенные в
разных каталогах могут иметь одно и то же имя, то возможна ошибка
при попытке переноса файлов с одинаковыми именами. В этом случае
будет возвращен код ошибки 58 [5.4.8].
Средний уровень.
MS DOS может переименовывать файлы, используя как метод управляющего
блока файла, так и метод дескриптора файла. Первый из них
может применяться только к файлам, расположенным в текущем каталоге.
Метод FCB:
Используйте функцию 17H прерывания 21H. DS:DX должны указывать
на открытый управляющий блок файла. Поместите новое имя файла в
FCB, начиная со смещения 11H (это "резервная" область блока).
Новое имя может использовать символ "?", в этом случае символы,
находящиеся в этих позициях, не будут изменяться. При возврате,
если новое имя уже существовало в каталоге, то AL будет равно FF,
иначе AL = 0. В примере имя файла ACCOUNTS.DAT меняется на
DEBTS.DAT.
;---в сегменте данных
FCB DB 'FILENAMEEXT',25 DUP(0)
NEWNAME DB 'NEWNAME EXT', ;11 символов нового имени
;---помещаем новое имя файла в переменную NEWNAME
MOV SI,OFFSET NEWNAME ;DS:SI указывают на новое имя
MOV AX,SEG FCB ;ES:DI указывают на FCB
MOV ES,AX ;
MOV DI,OFFSET FCB ;
ADD DI,11H ;начинаем со смещения 11H
MOV CX,11 ;имя файла содержит 11 символов
REP MOVSB ;переносим 11 байтов
LEA DX,FCB ;DS:DX указывают на FCB
MOV AH,17H ;функция изменения имени
INT 21H ;изменяем имя
CMP AL,0FFH ;проверка на ошибку
JE RENAME_ERROR ;уход на обработку ошибки
Метод дескриптора файла:
Функция 56H прерывания 21H переименовывает и перемещает файлы.
DS:DX должны указывать на строку, дающую путь и имя переименуемого
файла (до 63-х символов) и завершающуюся символом ASCII 0.
ES:DI должны указывать на вторую строку, которая дает новые имя и
путь файла. Имена накопителей, если они присутствуют, должны
совпадать. Если пути различны, то файл переноносится в другой
подкаталог. Чтобы перенести файл без переименования надо во второй
строке указать то же самое имя, но другой путь. При возврате,
если произошла ошибка, то устанавливается флаг переноса, а AX
будет содержать 3 - если один из путей не найден, 5 - при ошибке
на диске и 17 - при попытке переноса между разными накопителями.
В примере файл ACCOUNTS.DAT переносится из подкаталога GAINS в
подкаталог LOSSES.
;---в сегменте данных
OLDPATH DB 'A:GAINS\ACCOUNTS.DAT',0
NEWPATH DB 'A:LOSSES\ACCOUNTS.DAT',0
;---изменение пути файла
LEA DX,OLDPATH ;DS:DX указывают на старый путь
MOV AX,SEG NEWPATH ;ES:DI указывают на новый путь
MOV ES,AX ;
MOV DI,OFFSET NEWPATH ;
MOV AH,56H ;номер функции
INT 21H ;переносим файл
JC ERROR_ROUTINE ;уход на обработку ошибки
5.3.5 Подготовка к файловым операциям.
Языки высокого уровня, такие как Бейсик, выполняют подготовительную
работу для файловых операций автоматически. Однако программы
на языке ассемблера имеют достаточно работы перед тем как
создать или открыть файл. Требования отличаются, в зависимости от
того используется ли для доступа к файлу метод управляющего блока
файла или метод дескриптора файла. Для обоих методов Вам необходимо
строку или блок параметров, указывающих на файл и буфер для
переноса данных. MS DOS предоставляет различные наборы функций
чтения/записи для двух методов.
Средний уровень.
Метод управляющего блока файла:
Этот метод доступа к файлам требует, чтобы Вы создали блок
параметров, котрый первоначально должен содержать такую информацию,
которая позволяет найти файл в каталоге. Хотя FCB имеет
много полей, вообще говоря, только некоторые из них должны быть
заполнены; MS DOS заполняет большинство остальных полей информацией
после того, как файл открывается. Отметим, что к началу FCB
может добавляться специальное поле для создания расширенного FCB,
который объяняется ниже. Вот структура FCB:
Накопитель (DB) Число, определяющее на каком накопителе
будет искаться файл, 1 = A, 2 = B и т.д.
Если указан 0, то берется накопитель по
умолчанию, а затем система заменяет 0 на код
этого накопителя.
Имя и расширение Восьмибайтное имя файла, выравненное по
(11 байтов) левому краю должно быть дополнено пробелами
(ASCII 32), если оно меньше 8 байтов. То же
относится и к трехбайтному расширению. Между
ними не должна стоять точка.
Текущий блок (DW) DOS организует файлы блоками по 128 записей,
пронумерованных от 0 до 127. Например, сис-
тема рассматривает запись #129 файла прямого
доступа, как запись #0 блока #1 (отсчет как
для записей, так и для блоков ведется с 0).
В файлах нет специальных ограничителей ни
для блоков ни для записей. Вместо этого
смещение для блоков и записей вычисляется
исходя из длины записи, которая устанавли-
вается следующим полем FCB.
Размер записи (DW) Все функции MS DOS, связанные с чтением или
записью в файл, работают в терминах записи.
Для файлов прямого доступа важно, чтобы
размер записи был установлен равным размеру
записей, помещенных в файл. Для последова-
тельных файлов размер записи не столь важен,
однако маленький размер записи будет замед-
лять дисковые операции. Поскольку размер
сектора 512 байтов, то оптимальным является
размер записи 512 байтов. Система автомати-
чески помещает значение по умолчанию 80H
(128) в поле длины записи при открытии фай-
ла. Поэтому не забудьте установить это поле
после открытия файла.
Размер файла (DD) Размер указывается с точностью до байта. Это
поле заполняется системой при открытии фай-
ла.
Дата файла (DW) Дата записывается системой при открытии FCB.
Ее формат приведен в [5.2.5].
Текущая запись (DB) Текущая запись используется совместно с
полем текущего блока. Записи нумеруются от 0
до 127. Запись прямого доступа #200, распо-
ложенная в блоке 1, имеет номер текущей
записи равный 71 ((200 - 128) - 1).
Номер записи пря- Вместо того, чтобы требовать от программы,
мого доступа (DD) чтобы она вычисляла текущие значения блока и
записи для файла прямого доступа, MS DOS
делает эту работу сама. При операциях с
файлами прямого доступа просто поместите
номер записи в это 4-хбайтное поле. При
выполнении операции с файлом прямого доступа
MS DOS поместит нужные значения в поля теку-
щего блока и текущей записи. Помните, что
старший байт расположен в старшей ячейке.
Связь между полями текущей записи, текущего блока и номер записи
прямого доступа показана на рис. 5-3.
Простейший путь создать FCB как переменную в сегменте данных
программы. Если имя открываемого файла не меняется, то это имя
может быть прямо записано в это поле. Остаток блока инициализируйте
байтами ASCII 0. Только после того как FCB будет открыт (с
помощью функции 0FH прерывания 21H, как показано в [5.3.3]) Вы
должны записать в блок остальную информацию. Отметим, что FCB для
работы с простым последовательным файлом с длиной записи 128
байтов не требует дальнейших приготовлений. После создания FCB
дальнейшие операции требуют, чтобы DS:DX указывали на него. Простейшая
форма его такая:
FCB DB 1,'FILENAMEEXT',25 DUP(0)
Можно также создать FCB как структуру:
FCB STRUC
DRIVE_NUM DB 0
FILE_NAME DB 8 DUP(?)
FILE_EXT DB 3 DUP(?)
BLOCK_NUM DW 0
RECORD_SIZE DW 0
FILE_SIZE DD 0
FILE_DATE DW 0
RESERVED DB 10 DUP(0)
CURRENT_REC DB 0
RANDOM_REC DD 0
FCB ENDS
При таком подходе программе проще помещать данные в FCB, поскольку
метки существуют для каждого поля. В зависимости от типа файловых
операций на поля могут накладываться следующие ограничения:
1. Для файлов прямого доступа Вы должны установить размер
записи и номер записи в поле записи прямого доступа.
2. Для доступа к последовательным файлам с начала Вы должны
установить только размер записи, при условии, что Вы инициализировали
поля текущего блока и текущей записи в 0 (просто обнулите
весь FCB, за исключением имен накопителя и файла). При открытии
поле размера записи будет установлено равным 128, если это значение
устаривает Вас, то дальнейшая подготовка не нужна.
3. Для доступа к последовательному файлу с середины или с
конца Вы должны установить поля текущего блока и текущей записи
(в этом случае Ваша программа должна будет производить вычисления
сама).
Префикс программного сегмента [1.3.0] имеет достаточно большое
поле, чтобы содержать управляющий блок файла. Это пространство
предоставляется для каждой программы, поэтому экономно использовать
его, особенно в программах типа .COM. Поле FCB расположено
со смещением 5CH в префиксе программного сегмента. В программах
COM используйте ORG для создания FCB следующим образом (здесь
помечен также используемый по умолчанию DTA, который будет обсуждаться
ниже):
;---в начале кодового сегмента
ORG 5CH
FCB LABEL BYTE
DRIVE_NUM DB 0
FILE_NAME DB 8 DUP(?)
FILE_EXT DB 3 DUP(?)
BLOCK_NUM DW 0
RECORD_SIZE DW 0
FILE_SIZE DD 0
FILE_DATE DW 0
RESERVED DB 10 DUP(0)
CURRENT_REC DB 0
RANDOM_REC DD 0
ORG 80H
DTA LABEL BYTE
ORG 100H
ASSUME CS:CSEG, DS:DSEG, SS:SSEG
Расширенный FCB используется для создания или доступа к файлу,
имеющему специальные атрибуты, например, к спрятанному файлу или
файлу только для чтения. Различные атрибуты объяснены в [5.2.6].
Расширенный FCB на 7 байтов длиннее, причем эти 7 байтов предшетсвуют
обычному блоку. Первый байт равен FF, что указывает на
специальный статус. За ним следуют 5 байтов ASCII 0, а затем байт
атрибутов. При открытии файла с использованием расширенного FCB
DS:DX должны указывать на первый из дополнительных семи байтов, а
не на имя накопителя, как для обычного FCB. Вот обычная форма,
где 2 - значение байта атрибутов, а 1 - указывает на накопитель:
FCB DB 0FFH, 5 DUP(0),2,1,'FILENAMEEXT',25 DUP(0)
Метод дескриптора файла:
Этот метод требует меньшей подготовки чем метод FCB. Для него
Вы должны только создать строку, указывающую путь к файлу, такую
как в стандартных командах DOS. Например B:COMPILE\UTILITY\PASCAL
указывает на файл PASCAL в подкаталоге UTILITY. Строка ограничена
длиной в 63 символа, включая имя накопителя. При открытии файла
(с использованием функции 3DH прерывания 21H - см. [5.3.3]),
DS:DX должны указывать на первый байт этой строки. Система выполняет
всю работу по анализу строки и нахождению файла, а после
того как файл открыт она возвращает 16-битный идентификационный
номер файла в AX. Его называют номером файла и он используется во
всех последующих операциях с этим файлом.
Буфера данных:
Программа должна указать место в памяти, куда должны помещаться
принимаемые данные или откуда должны браться выводимые. Это
пространство в памяти может быть временным буфером, который будет
использоваться данными как промежуточная станция. Или это пространство
может быть именно тем местом, где данные реально обрабатываются.
Обычно временный буфер устанавливается размером в одну
запись и бывает удобно описать его как строковую переменную в
сегменте данных, как это сделано в нижеприведенном примере. С
другой стороны, большие рабочие области данных должны распределяться
с помощью методов распределения памяти, предоставляемых
операционной системой [1.3.1]. Ведь создание, например, области
данных размером в 10000 байт в сегменте данных сделает программу
на диске на 10000 байт длиннее, что совершенно ненужно.
Буфер используемый методом FCB доступа к файлам называется
областью обмена с диском или DTA. На этот буфер указывает словный
указатель, который хранится операционной системой и который может
быть изменен Вашей программой. В фирменной документации этот
указатель на DTA часто сам называют DTA. Поскольку указано только
начало буфера, то ничто не мешает данным занять область прилегающую
к DTA, поэтому Вы сами должны следить, чтобы этого не произошло.
Указатель на DTA устанавливается специальной функцией DOS
и после того как он установлен все функции чтения/записи автоматически
обращаются к нему. Это означает, что сами функции не
должны содержать адрес временного буфера.
Когда DTA совпадает с областью данных, в которой обрабатываются
данные, то необходимо постоянно менять DTA, с тем чтобы файловые
операции могли получать доступ к различным фрагментам данных.
При простой операции последовательного чтения или при операции
чтения одного блока с прямым доступом система автоматически помещает
в DTA одну запись за другой. Необходимо отвести пространство,
достаточное для числа записей, которые будут затребованы
программой. DTA не может иметь размеры больше одного сегмента
(64K).
Для установки указателя на DTA используйте функцию 1AH прерывания
21H. DS:DX должны указывать на первый байт DTA, а затем
надо выполнить функцию. Это все что нужно. Вот пример:
;---в сегменте данных
DTA 256 DUP (?)
;---установка DTA
LEA DX,DTA ;DS:DX указывают на DTA
MOV AH,1AH ;функция установки DTA
INT 21H ;установка DTA
Функция 2FH прерывания 21H сообщает текущую установку указателя
DTA. У нее нет входных регистров. При возврате ES:BX содержат
сегмент и смещение DTA.
Префикс программного сегмента [1.3.0] обеспечивает каждую
программу 128-байтным встроенным DTA, начиная со смещения 80H и
до 9FH. Вы можете использовать его при нехватке памяти. Первоначально
указатель на DTA указывает именно на этот буфер, поэтому
если Вы будете использовать его, то нет нужды устанавливать указатель.
Этот буфер по умолчанию особенно удобно использовать с
COM файлами, где DS указывает на начало префикса программного
сегмента. Для файлов EXE может потребоваться небольшой добавочный
код, чтобы использовать DTA по умолчанию. Отметим, что для определения
текущей установки указателя на DTA Вы должны использовать
функцию 2FH прерывания 21H. У нее нет входных регистров, а при
выходе ES:BX указывают на DTA.
Указатель на DTA не используется при доступе к файлу методом
дескриптора файла. Функции чтения или записи данных всегда содержат
адрес, по которому расположен буфер данных. Целиком на Вашей
совести лежит определение того, будут ли данные передаваться
через временный буфер или непосредственно в то место, где они
будут использоваться.
5.3.6 Анализ информации командной строки.
При запуске многие программы позволяют пользователю поместить
добавлчную информацию в командной строке, обычно указывающую имя
файла, с которым программа будет работать. Эта информация записывается
в 128-байтную область, начинающуюся со смещения 80H в
префиксе программного сегмента [1.3.0]. (Эта же область используется
как DTA по умолчанию, как обсуждалось в [5.3.5].) Первый
байт содержит длину строки, а затем идет сама строка.
Для программ, использующих метод дескриптора файла для работы
с файлами, имя файла, вводимое в командной строке, должно иметь
адекватную форму. Требуется, чтобы пользователь программы использовал
стандартный протокол MS DOS для строки пути. С другой стороны,
управляющий блок файла требует, чтобы строка вида 'A:ACCT.-
BAK' была преобразована к виду 1,'ACCT BAK'. MS DOS имеет
специальную функцию, которая выполняет такое преобразование над
первой порцией информации, следующей за именем программы в командной
строке. Эта процедура называется разбором строки (parsing).
Средний уровень.
Имя файла должно быть первой информацией, следующей за именем
загружаемой программы. Оно должно быть отделено от имени программы
одним из следующих символов : . ; , = + табуляцией или пробелом.
Конец имени файла должен быть указан одним из символов : . ;
, = + \ " " | / " [ ] табуляцией, пробелом или одним из управляющих
символов (коды ASCII от 1 до 31).
Функция 29H прерывания 21H производит разбор имени файла.
DS:SI должны указывать на смещение 81H в PSP. Помните, что при
загрузке программы как DS, так и ES указывают на начало PSP.
ES:DI должны указывать на область памяти, которая будет служить
управляющим блоком для нового файла. Установка битов в AL определяет
как будет выполняться разборка. Имеют значение только биты
0-3:
бит 0 1 = начальный ограничитель игнорируется
1 1 = байт, идентифицирующий накопитель, устанавливается
в FCB, только если он указан в командной строке
2 1 = имя файла в FCB меняется только если командная
строка содержит имя файла
3 1 = расширение файла в FCB меняется только если коман-
ная строка содержит расширение файла
После того как эта информация установлена, программа может вызывать
функцию. Если в командной строке не указан накопитель, то
берется накопитель по умолчанию. Если отсутствует расширение
файла, то предполагается, что оно пробельное (ASCII 32). Если в
имени файла указана звездочка, то она заменяется на нужное число
вопросительных знаков в поле имени файла FCB. AL возвращает 1,
если имя файла содержит * или ? и FF, если указан неверный накопитель.
При возврате DS:SI указывают на первый символ, следующий за
именем файла, которое начинается со смещения 81H. Дальнейшая
информация, содержащаяся в командной строке должна расшифровываться
Вашей программой. ES:DI указывают на первый байт вновь
сформированного FCB. Если в FCB не создано допустимого имени
файла, то содержимое ES:[DI]+1 равно пробелу. Вот пример, который
помещает код в область FCB в PSP, начиная со смещения 5CH:
;---разбираем командную строку, создавая FCB со смещением 5CH
;---в PSP
MOV AH,29H ;
MOV SI,81H ;
MOV DI,5CH ;
MOV AL,1111B ;
INT 21H ;
MOV AL,ES:[DI]+1 ;
CMP AL,32 ;
JE ERROR_ROUTINE ;
Посмотри в окно!
Чтобы сохранить великий дар природы — зрение,
врачи рекомендуют читать непрерывно не более 45–50 минут,
а потом делать перерыв для ослабления мышц глаза.
В перерывах между чтением полезны
гимнастические упражнения: переключение зрения с ближней точки на более дальнюю.
Раздел 4. Чтение и запись файла.
Имеются два основных метода доступа к файлу - последовательный
и прямой. Хотя в вычислительной литературе часто используют термины
"последовательный" файл и файл "прямого доступа", сами по
себе файлы хранятся на диске одинаково: как непрерывная последовательность
байтов. Ни в каталоге ни в каком-либо другом месте
нет индикатора, указывающего, что данный файл является последовательным
или файлом прямого доступа. Реально эти два типа файлов
различаются по расположению данных в них и по методу доступа к
ним. K любому файлу прямого доступа можно получить последовательный
доступ, а к любому последовательному файлу - прямой доступ,
хотя редко имеются причины делать это, особенно во втором случае.
Последовательные файлы помещают элементы данных один за другим,
независимо от их длины, разделяя эти элементы парой символов,
сначала возвратом каретки (ASCII 13), а затем переводом
строки (ASCII 10). Языки высокого уровня, такие как Бейсик,
вставляют эти символы автоматически, в то время как программы на
ассемблере должны сами заботиться о вставке этих символов после
записи каждой переменной в файл. В последовательных файлах могут
храниться как числа, так и строки. Строки требуют по одному байту
на каждый символ строки. Числа по соглашению записываются в строковом
виде, хотя они могут писаться и в числовом виде. Таким
образом Бейсик записывает значение "128" в виде строки из трех
цифр, хотя программа на ассемблере может записать это число в
виде двухбайтного целого ил
...Поділитися у соцмережах