Жанр: Учеба
Ассемблер и программирование для IBM PC
...нтов таблицы не встречались указанные ограничители. Помните,
что двоичные числа могут выражаться любыми битовыми комбинациями. Для
поиска можно использовать команду SCAS.
ТРАНСЛИРУЮЩАЯ КОМАНДА XLAT
________________________________________________________________
Команда XLAT транслирует содержимое одного байта в другое
предопределенное значение. С помощью команды XLAT можно проверить
корректность содержимого элементов данных. При передаче данных между
персональным компьютером и ЕС ЭВМ (IBM) с помощью команды XLAT можно
выполнить перекодировку данных между форматами ASCII и EBCDIC.
В следующем примере происходит преобразование цифр от 0 до 9 из кода
ASCII в код EBCDIC. Так как представление цифр в ASCII выглядит как
шест.30-39, а в EBCDIC - шест.F0-F9, то замену можно выполнить командой
OR. Однако, дополнительно преобразуем все остальные коды ASCII в пробел
(шест.40) в коде EBCDIC. Для команды XLAT необходимо определить таблицу
перекодировки, которая учитывает все 256 возможных символов, с кодами
EBCDIC в ASCII позициях:
XLTBL DB 47 DUP(40H) ;Пробелы в коде EBCDIC
DB 0F0H,0F1H,0F2H,0F3H,...,0F9H ;0-9 (EBCDIC)
DB 199 DUP(40H) ;Пробелы в коде EBCDIC
Команда XLAT предполагает адрес таблицы в регистре BX, а транслируемый
байт (например, поля ASCNO) в регистре AL. Следующие команды выполняют
подготовку и трансляцию байта:
LEA BX,XLTBL
MOV AL,ASCNO
XLAT
Команда XLAT использует значение в регистре AL в качестве относительного
адреса в таблице, т.е. складывает адрес в BX и смещение в AL. Если,
например, ASCNO содержит 00, то адрес байта в таблице будет XLTBL+00 и
команда XLAT заменит 00 на шест.40 из таблицы. Если поле ASCNO содержит
шест.32, то адрес соответствующего байта в таблице будет XLTBL+50. Этот
байт содержит шест.F2 (2 в коде EBCDIC), который команда XLAT загружает в
регистр AL.
В программе на рис.14.4 добавлено преобразование десятичной точки
(2E) и знака минус (2D) из кода ASCII в код EBCDIC (4B и 60
соответственно). В программе организован цикл для обработки шестибайтового
поля. Поле ASCNO в начале выполнения программы содержит значение 31.5 с
последующим пробелом, или шест.2D33312E3520. В конце выполнения программы
в поле EBCNO должно быть шест.60F3F14BF540.
__________________________________________________________________________
page 60,132
TITLE XLATE (COM) Перевод кода ASCII в код EBCDIC
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG 100H
BEGIN: JMP MAIN
; ----------------------------------------------------
ASCNO DB '-31.5'
EBCNO DB 6 DUP(' ')
XLTAB DB 45 DUP(40H)
DB 60H, 2DH
DB 5CH
DB 0F0H,0F1H,0F2H,0F3H,0F4H
DB 0F5H,0F6H,0F7H,0F8H,0F9H
DB 199 DUP(40H)
; ----------------------------------------------------
MAIN PROC NEAR ;Основная процедура
LEA SI,ASCNO ;Адрес символов ASCNO
LEA DI,EBCNO ;Адрес поля EBCNO
MOV CX,06 ;Длина
LEA BX,XLTAB ;Адрес таблицы
A20:
MOV AL,[SI] ;Получить ASCII символ
XLAT ;Перекодировка
MOV [DI],AL ;Записать в поле EBCNO
INC DI
INC SI
LOOP A20 ;Повторить 6 раз
RET
MAIN ENDP
CODESG ENDS
END BEGIN
__________________________________________________________________________
Рис.14.4. Преобразование ASCII в EBCDIC.
ПРОГРАММА: ОТОБРАЖЕНИЕ ШЕСТ. И ASCII-КОДОВ
________________________________________________________________
__________________________________________________________________________
page 60,132
TITLE ASCHEX (COM) Преобразование ASCII в шест.
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,ES:CODESG
ORG 100H
BEGIN: JMP MAIN
; -----------------------------------------------
DISPROW DB 16 DUP(' '), 13
HEXSTR DB 00
XLATAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H,46H
; -----------------------------------------------
MAIN PROC NEAR ;Основная процедура
CALL Q10CLR ;Очистить экран
LEA SI,DISPROW
A20LOOP:
CALL C10HEX ;Перекодировать
CALL D10DISP ; и вывести на экран
CMP HEXCTR,0FFH ;Последнее значение (FF)?
JE A50 ; да - завершить
INC HEXCTR ; нет - перейти к следующему
JMP A20LOOP
A50: RET
MAIN ENDP
C10HEX PROC NEAR ;Перекодировка в шест.
MOV AH,00
MOV AL,HEXCTR ;Получить шест.пару
SHR AX,CL ;Сдвиг правой шест.цифры
LEA BX,XLATAB ;Установить адрес таблицы
MOV CL,04 ;Установить величину сдвига
XLAT ;Перекодировка в шест.
MOV [SI],AL ;Записать левый символ
MOV AL,HEXCTR
SHL AX,CL ;Сдвиг левой цифры
XLAT
MOV [SI]+1,AL ;Перекодировка в шест.
RET ;Записать правый символ
C10HEX ENDP
D10DISP PROC NEAR ;Вывод на экран
MOV AL,HEXCTR
MOV [SI]+3,AL
CMP AL,1AH ;Символ EOF?
JE D20 ; да - обойти
CMP AL,07H ;Меньше/равно 08?
JB D30 ; да - OK
CMP AL,10H ;Больше/равно 0F?
JAE D30 ; да - OK
D20:
MOV BYTE PTR [SI]+3,20H
D30:
ADD SI,05 ;Следующий элемент в строке
LEA DI,DISPROW+80
CMP DI,SI
JNE D40
MOV AH,40H ;Функция вывода на экран
MOV BX,01 ;Номер устройства
MOV CX,81 ;Вся строка
LEA DX,DISPROW
INT 21H
LEA SI,DISPROW ;Начальный адрес строки
D40: RET
D10DISP ENDP
Q10CLR PROC NEAR ;Очистка экрана
MOV AX,0600H
MOV BH,03 ;Цвет (07 для ч/б)
MOV CX,0000
MOV DX,184FH
INT 10H
RET
Q10CLR ENDP
CODESG ENDS
END BEGIN
__________________________________________________________________________
Рис.14.5. Отображение шест. и ASCII-кодов
Программа, приведенная на рис.14.5, отображает на экране почти все
ASCII-символы, а также их шест. значения. Например, ASCII-символ для
шест.53 - это буква S, эти данные программа выводит в виде 53 S. Полное
изображение на экране выглядит в виде матрицы 16х16:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
Как было показано еще на рис.8.1, отображение ASCII-символов, особых
проблем не вызывает. Что же касается отображения шест. значений в символах
ASCII, то этот процесс более сложный. Например, для вывода на экран в коде
ASCII шест.00, 01 и т.д. необходимо преобразовать шест.00 в шест.3030,
шест.01 в шест.3031 и т.д.
В программе начальное значение поля HEXCTR равно 00. Это значение
последовательно увеличивается на 1. Процедура C10HEX расщепляет байт
HEXCTR на две щест. цифры. Предположим, что байт HEXCTR содержит шест.4F.
Процедура сначала выделяет шест. цифру 4 и использует это значение для
перекодировки по таблице XLATAB. В регистре AL устанавливается в
результате значение шест.34. Затем процедура выделяет вторую шест. цифру F
и перекодирует ее в шест.46. В результате обработки получается шест.3446,
что отображается на экране как 4F.
Так как функция DOS для вывода на экран (шест.40) рассматривает
шест.1A как конец файла, то в программе это значение заменяется на пробел.
Программа, использующая для вывода на экран функцию DOS (шест.09), должна
заменять символ ограничитель '$' на пробел.
Существует много различных способов преобразования шест. цифр в
ASCII-символы. Можно поэкспериментировать с операциями сдвига и сравнения.
ПРОГРАММА: СОРТИРОВКА ЭЛЕМЕНТОВ ТАБЛИЦЫ
________________________________________________________________
Часто возникает необходимость сортировки элементов таблицы в
восходящем или нисходящем порядке. Например, пользователю может
потребоваться список наименований товара в алфавитном порядке или список
общих цен в нисходящей последовательности. Обычно, табличные данные не
определяются как в предыдущей программе, а загружаются с клавиатуры или с
диска. Данный раздел посвящен сортировке элементов таблицы, что касается
различных применений, включающих сортировку записей на дисках, то здесь
возможны более сложные программы.
Существует несколько алгоритмов сортировки таблиц от неэффективных,
но понятных, до эффективных и непонятных. Программа сортировки,
предлагаемая в данном разделе, весьма эффективна и может применяться для
большинства табличных сортировок. Конечно, если не проверить различные
алгоритмы сортировок, то даже самая неэффективная программа может
показаться работающей со скоростью света. Но цель данной книги - показать
технику ассемблера, а не сортировки. Основной подход заключается в
сравнении соседних элементов таблицы. Если первый элемент больше второго,
то элементы меняются местами. Таким образом выполняется сравнение
элементов 1 со 2, 2 с 3 и т.д. до конца таблицы с перестановкой элементов
там, где это необходимо. Если в проходе были сделаны перестановки, то весь
процесс повторяется с начала таблицы т.е. сравниваются снова элементы 1-2,
2-3 и т.д. Если в проходе не было перестановок, то таблица отсортирована и
можно прекратить процесс.
Ниже приведен алгоритм, в котором переменная SWAP является
индикатором: была перестановка элементов (YES) или нет (NO):
G10: Определить адрес последнего элемента
G20: Установить SWAP=NO
Определить адрес первого элемента
G30: Элемент " следующего элемента?
Да: Представить элементы
Установить SWAP=YES
Перейти к следующему элементу
Конец таблицы?
Нет: Перейти на G30
Да: SWAP=YES?
Да: Перейти на G20 (повторить сорт.)
Нет: Конец сортировки
Программа, показанная на рис.14.6, обеспечивает ввод с клавиатуры до
30 имен, сортировку введенных имен в алфавитном порядке и вывод на экран
отсортированного списка имен.
__________________________________________________________________________
page 60,132
TITLE NMSORT (EXE) Ввод и сортировка имен
; -----------------------------------------------
STACK SGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACK ENDS
; -----------------------------------------------
DATASG SEGMENT PARA 'Data'
NAMEPAR LABEL BYTE ;Имя списка параметров:
MAXNLEN DB 21 ; макс. длина
NAMELEN DB ? ; число введенных символов
NAMEFLD DB 21 DUP(' ') ; имя
CRLF DB 13, 10, '$'
ENDADDR DW ?
MESSG1 DB 'Name?', '$'
NAMECTR DB 00
NAMETAB DB 30 DUP(20 DUP(' ')) ;Таблица имен
NAMESAV DB 20 DUP(?), 13, 10, '$'
SWAPPED DB 00
DATA ENDS
; -----------------------------------------------
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATDSG,SS:STACK,ES:DATASG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
MOV ES,AX
CLD
LEA DI,NAMETAB
CALL Q10CLR ;Очистить экран
CALL Q20CURS ;Установить курсор
A20LOOP:
CALL B10READ ;Ввести имя с клавиатуры
CMP NAMELEN,00 ;Есть ли еще имена?
JZ A30 ; нет - идти на сортировку
CMP NAMECTR,30 ;Введено 30 имен?
JE A30 ; да - идти на сортировку
CALL D10STOR ;Записать имя в таблицу
JMP A20LOOP
A30: ;Конец ввода имен
CALL Q10CLR ;Очистить экран
CALL Q20CURS ; и установить курсор
CMP NAMECTR,01 ;Введено менее 2 имен?
JBE A40 ; да - выйти
CALL G10SORT ;Сортировать имена
CALL K10DISP ;Вывести результат на экран
A40: RET ;Завершить программу
BEGIN ENDP
; Ввод имен с клавиатуры?
; ----------------------
B10READ PROC
MOV AH,09
LEA DX,MESSG1 ;Вывести текст запроса
INT 21H
MOV AH,0AH
LEA DX,NAMEPAR ;Ввести имя
INT 21H
MOV AH,09
LEA DX,CRLF ;Вывести CRLF
INT 21H
MOV BH,00 ;Очистить поле после имени
MOV BL,NAMELEN ;Получить счетчик символов
MOV CX,21
SUB CX,BX ;Вычислить оставшуюся длину
B20:
MOV NAMEFLD[BX],20H ;Установить символ пробела
INC BX
LOOP B20
RET
B10READ ENDP
; Запись имени в таблицу:
; ----------------------
D10STOR PROC
INC NAMECTR ;Число имен в таблице
CLD
LES SI,NAMEFLD
MOV CX,10
REP MOVSV ;Переслать имя в таблицу
RET
D10STOR ENDP
; Сортировка имен в таблице:
; -------------------------
G10SORT PROC
SUB DI,40 ;Установить адреса останова
MOV ENDADDR,DI
G20:
MOV SWAPPED,00 ;Установить начало
LEA SI,NAMETAB ; таблицы
G30:
MOV CX,20 ;Длина сравнения
MOV DI,SI
ADD DI,20 ;Следующее имя для сравнения
MOV AX,DI
MOV BX,SI
REPE CMPSB ;Сравнить имя со следующим
JBE G40 ; нет перестановки
CALL H10XCHG ; перестановка
G40:
MOV SI,AX
CMP SI,ENDADDR ;Конец таблицы?
JBE G30 ; нет - продолжить
CMP SWAPPED,00 ;Есть перестановки?
JNZ G20 ; да - продолжить,
RET ; нет - конец сортировки
G10SORT ENDP
; Перестановка элементов таблицы:
; ------------------------------
H10XCHG PROC
MOV CX,10
LEA DI,NAMESAV
MOV SI,BX
REP MOVSW ;Сохранить меньший элемент
MOV CX,10
MOV DI,BX
REP MOVSW ;Переслать больший элемент
; на место меньшего
MOV CX,10
LEA SI,NAMESAV
REP MOVSW ;Переслать сохраненный
; элемент на место большего
MOV SWAPPED,01 ;Признак перестановки
RET
H10XCHG ENDP
; Вывод на экран отсортированные имена:
; ------------------------------------
K10DISP PROC
LEA SI,NAMETAB
K20:
LEA DI,NAMESAV ;Начальный адрес таблицы
MOV CX,10
REP MOVSV
MOV AH,09
LEA DX,NAMESAV
INT 21H ;Вывести на экран
DEC NAMECTR ;Это последний элемент?
JNZ K20 ; нет - повторить цикл,
RET ; да - выйти
K10DISP ENDP
; Очистка экрана:
; --------------
Q10CLR PROC
MOV AX,0600H
MOV BH,61H ;Цвет (07 для ч/б)
SUB CX,CX
MOV DX,184FH
INT 10H
RET
Q10CLR ENDP
; Установка курсора:
; -----------------
Q20CURS PROC
MOV AH,02
SUB BH,BH
SUB DX,DX ;Установить курсор в 00,00
INT 10H
RET
Q20CURS ENDP
CODESG ENDS
END BEGIN
__________________________________________________________________________
Рис.14.6. Сортировка таблицы имен
ОПЕРАТОРЫ ТИПА, ДЛИНА И РАЗМЕРА
________________________________________________________________
Ассемблер содержит ряд специальных операторов, которые могут
оказаться полезными при программировании. Например, при изменении длины
таблицы придется модифицировать программу (для нового определения таблицы)
и процедуры, проверяющие конец таблицы. В этом случае использование
операторов TYPE (тип), LENGTH (длина) и SIZE (размер) позволяют уменьшить
число модифицируемых команд.
Рассмотрим определение следующей таблицы из десяти слов:
TABLEX DW 10 DUP(?) ;Таблица из 10 слов
Программа может использовать оператор TYPE для определения типа (DW в
данном случае), оператор LENGTH для определения DUP-фактора (10) и
оператор SIZE для определения числа байтов (10 х 2 = 20). Следующие
команды иллюстрируют три таких применения:
MOV AX,TYPE TABLEX ;AX=0002
MOV BX,LENGTH TABLEX ;BX=000A (10)
MOV CX,SIZE TABLEX ;CX=0014 (20)
Значения LENGTH и SIZE можно использовать для окончания табличного
поиска или сортировки. Например, если регистр SI содержит продвинутый
адрес таблицы при осуществлении поиска, то проверка на конец таблицы может
быть следующий:
CMP SI,SIZE TABLEX
В главе 23 "Справочник по директивам ассемблера" дается детальное
описание операторов TYPE, LENGTH и SIZE.
ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ
________________________________________________________________
- Для большинства применений, определяйте таблицы, имеющие
родственные элементы одной длины и формата данных.
- Стройте таблицы на основе форматов данных. Например, элементы могут
быть символьные или числовые длиной один, два и более байтов каждый. Может
оказаться более практичным определение двух таблиц: одна, например, для
трехсимвольных значений номеров, а другая для двухбайтовых значений цен
единиц товара. В процессе поиска адрес элементов таблицы номеров должен
увеличиваться на 3, а адрес элементов таблицы цен - на 2. Если сохранить
число выполненных циклов при поиске на равно, то, умножив это число на 2
(SHL сдвиг влево на один бит), получим относительный адрес искомого
значения цены. (Начальное значение счетчика циклов должно быть равно -1).
- Помните, что DB позволяет определять значения, не превышающие 256,
а DW записывает байты в обратной последовательности. Команды CMP и CMPSW
предполагают, что байты в сравниваемых словах имеют обратную
последовательность.
- Если таблица подвергается частым изменениям, или должна быть
доступна нескольким программам, то запишите ее на диск. Для внесения
изменений в таблицу можно разработать специальную программу модификации.
Любые программы могут загружать таблицу с диска и при обновлениях таблицы
сами программы не нуждаются в изменениях.
- Будьте особенно внимательны при кодировке сортирующих программ.
Пользуйтесь трассировкой для тестирования, так как малейшая ошибка может
привести к непредсказуемым результатам.
ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ
________________________________________________________________
14.1. Определите таблицу, которая содержит имена дней недели, начиная
с воскресения.
14.2 Предполагая, что воскресенье равно 1, напишите команды прямого
доступа к таблице, определенной в вопросе 14.1. используйте любые
подходящие имена.
14.3 Определите три отдельных связанных таблицы, содержащих следующие
данные:
а) числовые элементы: 06, 10, 14, 21, 24;
б) элементы наименований: видеокассеты, приемники, модемы,
клавиатуры, дискеты;
в) цены: 93.95, 82.25, 90.67, 85.80, 13.85.
14.4 Составьте программу, позволяющую вводить числовой элемент
(ITEMIN) и количество (QTYIN) с клавиатуры. Используя таблицу из вопроса
14.3, разработайте программу табличного поиска элемента равного ITEMIN.
Выделите из таблиц наименование и цену. Рассчитайте величину стоимости
(Количество х Цена ) и выдайте на экран наименование и стоимость.
14.5 Используя описание таблицы из вопроса 14.3, составьте процедуры:
а) пересылающую содержимое одной таблицы в новую (пустую) таблицу; б)
сортирующую содержимое новой таблицы в восходящей последовательности.
ГЛАВА 15 Дисковая память I: Организация
__________________________________________________________________________
Ц е л ь: Рассмотреть основные форматы записей в памяти на твердом
диске (винчестере) и на дискете, включая оглавление и таблицу
распределения файлов.
ВВЕДЕНИЕ
________________________________________________________________
Диск является распространенным средством для более или менее
долговременного хранения данных. Процессы обработки данных на твердом
диске (винчестере) аналогичны процессам для гибких дисков (дискет), за
исключением того, что возможно потребуется обеспечить пути для доступа к
многочисленным подоглавлениям винчестера. Для обработки файлов полезно
ознакомиться с организацией дисковой памяти. Каждая сторона стандартной 5
1/4 дюймовой дискеты содержит 40 концентрических дорожек, пронумерованных
от 00 до 39. На каждой дорожке форматируется восемь или девять секторов по
512 байтов каждый.
Данные записываются на диск в виде файлов, аналогично тому, как вы
записываете ассемблерные программы. Хотя на типы данных, которые можно
хранить в файле, не существует каких-либо ограничений, типичный
пользовательский файл содержит списки заказчиков, описи товаров и
предложений или списки имен и адресов. Каждая запись содержит информацию о
конкретном заказчике или описание товара. Внутри файла все записи имеют
одинаковую длину и формат. Запись может содержать одно или несколько
полей. Файл заказчиков, например, может состоять из записей, в которые
входит номер заказчика, имя заказчика и долговой баланс. Эти записи могут
быть расположены в порядке возрастания номеров заказчиков следующим
образом:
---T---T-----¬---T---T-----¬---T---T-----¬ ---T---T-----¬
¦#1¦имя¦суммদ#2¦имя¦суммদ#3¦имя¦сумма¦...¦#n¦имя¦сумма¦
L--+---+------L--+---+------L--+---+------ L--+---+------
Для программирования дисковых файлов следует в общих чертах
ознакомится только с концепцией и терминологией. Если в данной главе
размеры диска не указываются, то предполагается диск 5 1/4" формата.
ЕМКОСТЬ ДИСКА
________________________________________________________________
Емкость гибких дисков:
Версия DOS Число Число Число Всего
и тип дорожек секторов байтов в на двух
диска на стороне на дорожке секторе сторонах
До DOS 2.0 40 8 512 327 680
DOS 2.0 и после 40 9 512 368 640
Высокая плотность 80 15 512 1 228 800
3 1/2" 80 9 512 737 280
Емкость твердых дисков:
Тип Число Число Число Всего
диска дорожек секторов байтов в на 4-х
на стороне на дорожке секторе сторонах
10 мегабайт 306 17 512 10 653 696
20 мегабайт 614 17 512 21.377.024
Указание стороны (головки), дорожки или сектора на диске
осуществляется по номеру. Для стороны и дорожки отсчет ведется с 0, а для
сектора - с 1.
ОГЛАВЛЕНИЕ ДИСКА (КАТАЛОГ)
________________________________________________________________
Для того, чтобы организовать хранение информации на диске,
операционная система DOS резервируют определенные сектора для своих нужд.
Организация данных на дискете или на твердом диске существенно зависит от
их емкости. Форматированная двухсторонняя дискета с девятью секторами на
дорожке содержит следующую системную информацию:
Сторона Дорожка Сектор
0 0 1 Запись начальной загрузки
0 0 2-3 Таблица распределения файлов (FAT)
0 0 4-7 Каталог
1 0 1-3 Каталог
1 0 4 ... Файлы данных
Область записей данных начинается с третьего сектора на 1-й стороне
0-й дорожки и продолжается до девятого сектора. Следующие записи заносятся
на 0-ю сторону 1-й дорожки, затем на 1-ю сторону 1-й дорожки, затем на 0-ю
сторону 2-й дорожки и т.д. Такая особенность заполнения дисковой памяти на
противоположных дорожках снижает число перемещений головки дисковода.
Данный метод используется как для гибких, так и для твердых дисков.
При использовании утилиты FORMAT /S для форматизации дискеты, модули
DOS IBMBIO.COM и IBMDOS.COM записывается в первые сектора области данных.
Все файлы, даже меньшие 512 байт (или кратные 512), начинаются на
границе сектора. Для каждого файла DOS создает на нулевой дорожке диска
элемент оглавления. Каждый такой элемент описывает имя, дату, размер и
расположение файла на диске. Элементы оглавления имеют следующий формат:
Байт Назначение
0-7 Имя файла, определяемое из программы, создавшей данный файл.
Первый байт может указывать на статус файла: шест.00 обозначает,
что данный файл не используется, шест.E5 - файл удален, шест.2E
- элемент подоглавления.
8-10 Тип файла
11 Атрибут файла, определяющий его тип:
шест.00 - обычный файл;
шест.01 - файл можно только читать;
шест.02 - "спрятанный" файл;
шест.04 - системный файл DOS;
шест.08 - метка тома;
шест.10 - подоглавление;
шест.20 - архивный файл (для твердого диска).
12-21 Зарезервировано для DOS.
22-23 Время дня, когда файл был создан или последний раз изменялся, в
следующим двоичном формате:
|чччччммммммссссс|
24-25 Дата создания или последнего изменения файла, сжатая в два слова
в следующем двоичном формате:
|ггггггг|ммммддддд|
где год начинается с 1980 и может принимать значения от 0 до
119, месяц - от 1 до 12, а день - от 1 до 31.
26-27 Начальный кластер файла. Относительный номер последних двух
секторов каталога. Первый файл данных (без COM-модулей DOS)
начинается на относительном кластере 002. Текущая сторона,
дорожка и кластер зависят от емкости диска.
28-31 Размер файла в байтах. При создании файла DOS вычисляет и
записывает размер ф
...Поділитися у соцмережах