Код:
7. ФОРМАТ ФАЙЛА SAV
ФОРМАТ SAV ИСПОЛЬЗУЕТСЯ ДЛЯ ПРОГРАММ, КОТОРЫЕ БУДУТ
РАБОТАТЬ В ФОНОВОМ РАЗДЕЛЕ. ЭТОТ ФОРМАТ СОДЕРЖИТ АБСОЛЮТНЫЕ
АДРЕСА ПАМЯТИ.
В НУЛЕВОМ БЛОКЕ ФАЙЛА НАХОДИТСЯ ИНФОРМАЦИЯ, СОСТАВЛЕН-
НАЯ КОМПОНОВЩИКОМ ДЛЯ МОНИТОРА. ОСТАЛЬНЫЕ БЛОКИ СОДЕРЖАТ
ДВОИЧНЫЕ КОДЫ ПРОГРАММЫ.
В ЯЧЕЙКАХ НУЛЕВОГО БЛОКА ФАЙЛА НАХОДИТСЯ СЛЕДУЮЩАЯ
ИНФОРМАЦИЯ ДЛЯ МОНИТОРА:
0 - ПЕРВЫЕ ТРИ СИМВОЛА (VIR) КЛЮЧА VIRTUAL В КОДЕ
RAD50; ИСПОЛЬЗУЕТСЯ, ЕСЛИ КОМПОНОВКА ПРОИЗВОДИЛАСЬ
С КЛЮЧОМ /V;
2 - ВЕРХНИЙ ВИРТУАЛЬНЫЙ АДРЕС ПАМЯТИ, ИСПОЛЬЗУЕМЫЙ
ПРОГРАММОЙ; ИСПОЛЬЗУЕТСЯ, ЕСЛИ ПРИ КОМПОНОВКЕ В
КОМАНДНОЙ СТРОКЕ БЫЛ УКАЗАН КЛЮЧ /V;
4 - 12 - НЕ ИСПОЛЬЗУЮТСЯ;
14, 16 - ВЕКТОР ПРЕРЫВАНИЙ ПО ИНСТРУКЦИИ BPT; УСТАНАВЛИ-
ВАЕТСЯ ТОЛЬКО, ЕСЛИ ПРИ РАБОТЕ XM-МОНИТОРА В
КОМАНДНОЙ СТРОКЕ КОМПОНОВЩИКА БЫЛ УКАЗАН КЛЮЧ /R;
20, 22 - ВЕКТОР ПРЕРЫВАНИЙ ПО ИНСТРУКЦИИ IOT; УСТАНАВЛИ-
ВАЕТСЯ ТОЛЬКО ПРИ РАБОТЕ XM-МОНИТОРА, ЕСЛИ В
КОМАНДНОЙ СТРОКЕ КОМПОНОВЩИКА УКАЗАН КЛЮЧ /R;
24 - 32
- НЕ ИСПОЛЬЗУЮТСЯ;
34, 36 - ВЕКТОР ПРЕРЫВАНИЙ ПО ИНСТРУКЦИИ TRAP; УСТАНАВЛИ-
ВАЕТСЯ, ЕСЛИ ПРИ КОМПОНОВКЕ В КОМАНДНОЙ СТРОКЕ БЫЛ
УКАЗАН КЛЮЧ /R;
40 - СТАРТОВЫЙ АДРЕС ПРОГРАММЫ;
42 - НАЧАЛЬНОЕ ЗНАЧЕНИЕ УКАЗАТЕЛЯ СТЕКА (ИЗМЕНЯЕТСЯ
КЛЮЧОМ КОМПОНОВЩИКА /M);
44 - СЛОВО СОСТОЯНИЯ ПРОГРАММЫ (JSW);
46 - АДРЕС ЗАГРУЗКИ USR (0 ОЗНАЧАЕТ СТАНДАРТНОЕ РАЗМЕ-
ЩЕНИЕ);
50 - ВЕРХНИЙ АДРЕС ПАМЯТИ, ИСПОЛЬЗУЕМЫЙ ПРОГРАММОЙ;
52 - 54
- НЕ ИСПОЛЬЗУЮТСЯ;
56 - В TS-МОНИТОРЕ ИСПОЛЬЗУЕТСЯ ДЛЯ УКАЗАНИЯ РАЗМЕРА
ОБЛАСТИ В КСЛОВАХ, ТРЕБУЕМОЙ ДЛЯ РАБОТЫ ПРОГРАММЫ;
60 - 64
- НЕ ИСПОЛЬЗУЮТСЯ;
66 - АДРЕС НАЧАЛА БЛОКОВ ОПРЕДЕЛЕНИЯ ОКОН (УСТАНАВЛИ-
ВАЕТСЯ, ЕСЛИ БЫЛ ЗАДАН КЛЮЧ КОМПОНОВЩИКА /V);
70 - 356
- НЕ ИСПОЛЬЗУЮТСЯ;
360 - 377
- КАРТА ЗАГРУЗКИ ПРОГРАММЫ В ПАМЯТЬ.
ЯЧЕЙКА 40, СОДЕРЖАЩАЯ АДРЕС ЗАПУСКА ПРОГРАММЫ, МОЖЕТ
БЫТЬ УСТАНОВЛЕНА ПРИ КОМПОНОВКЕ КЛЮЧОМ /TRANSFER. НАПРИМЕР,
УКАЗАТЬ АДРЕС ЗАПУСКА ПРОГРАММЫ РАВНЫМ 2000 (ВОСЬМЕРИЧНОЕ):
.LINK PROGR.OBJ/TRANSFER:2000
ПРОГРАММА PROGR.SAV, СОЗДАВАЕМАЯ КОМПОНОВЩИКОМ, БУДЕТ
ЗАПУСКАТЬСЯ С 2000 АДРЕСА. ОБЫЧНО АДРЕС ЗАПУСКА ПРОГРАММЫ
ОПРЕДЕЛЯЕТСЯ ИЗ ДИРЕКТИВЫ .END.
ЯЧЕЙКИ 360 - 377 В НУЛЕВОМ БЛОКЕ ФАЙЛА ИСПОЛЬЗУЮТСЯ
КОМПОНОВЩИКОМ ДЛЯ ПЕРЕДАЧИ ИНФОРМАЦИИ О РАСПРЕДЕЛЕНИИ ПАМЯ-
ТИ KMON. КАЖДЫЙ БИТ ЯЧЕЕК СООТВЕТСТВУЕТ ОПРЕДЕЛЕННОМУ БЛОКУ
ПАМЯТИ ИЗ 256 СЛОВ И УСТАНАВЛИВАЕТСЯ В ТОМ СЛУЧАЕ, ЕСЛИ
ПРОГРАММА ЗАНИМАЕТ ХОТЯ БЫ ОДНО СЛОВО В ДАННОМ БЛОКЕ ПАМЯ-
ТИ. ЭТА ИНФОРМАЦИЯ ИСПОЛЬЗУЕТСЯ KMON ДЛЯ ОПРЕДЕЛЕНИЯ, БУДЕТ
ЛИ ПОЛЬЗОВАТЕЛЬСКАЯ ПРОГРАММА ПЕРЕКРЫВАТЬ KMON И USR.
ПРИ ЗАГРУЗКЕ НУЛЕВОГО БЛОКА В KMON ПРОИЗВОДИТСЯ ПРО-
ВЕРКА ЯЧЕЕК БЛОКА ОТНОСИТЕЛЬНО БИТОВОЙ СХЕМЫ ЗАЩИТЫ СИСТЕ-
МЫ, КОТОРАЯ СОДЕРЖИТСЯ В RMON. В ЯЧЕЙКИ, КОТОРЫЕ ЗАЩИЩЕНЫ В
СХЕМЕ, ТАКИЕ, КАК НАПРИМЕР, ВЕКТОРЫ УСТРОЙСТВ СИСТЕМЫ,
ЗАПИСЬ ИНФОРМАЦИИ ИЗ НУЛЕВОГО БЛОКА НЕ ПРОИЗВОДИТСЯ.
КОМАНДЫ МОНИТОРА R И RUN СЛУЖАТ ДЛЯ ЗАГРУЗКИ И ЗАПУСКА
ПРОГРАММ ТИПА SAV. КОМАНДА RUN ОБ'ЕДИНЯЕТ ДВЕ КОМАНДЫ: GET
И START. ПРИ ВЫПОЛНЕНИИ ЭТОЙ КОМАНДЫ KMON СЧИТЫВАЕТ НУЛЕВОЙ
БЛОК ФАЙЛА ТИПА SAV ВО ВНУТРЕННИЙ БУФЕР USR, ВЫБИРАЕТ
ИНФОРМАЦИЮ ИЗ ЯЧЕЕК 40-62 И 360-377. СРАВНИВАЯ БИТОВУЮ
ЗАЩИТУ ПАМЯТИ (LOWMAP), НАХОДЯЩУЮСЯ В RMON, С ЯЧЕЙКАМИ В
НУЛЕВОМ БЛОКЕ, KMON ЗАГРУЖАЕТ В ПАМЯТЬ (В СООТВЕТСТВУЮЩУЮ
ОБЛАСТЬ RMON) ИЗ БУФЕРА USR ТЕ ЯЧЕЙКИ, КОТОРЫЕ НЕ ЗАЩИЩЕНЫ.
НАПРИМЕР, ВЕКТОРЫ ПРЕРЫВАНИЙ УСТРОЙСТВ, ДРАЙВЕРЫ КОТОРЫХ
ВКЛЮЧЕНЫ В СИСТЕМНЫЕ ТАБЛИЦЫ RMON, НЕ БУДУТ ИЗМЕНЕНЫ. ЗАТЕМ
KMON УСТАНАВЛИВАЕТ В ЯЧЕЙКУ 50 ВЕРХНИЙ АДРЕС ИСПОЛЬЗУЕМОЙ
ПАМЯТИ ИЛИ ВЕРХНИЙ АДРЕС ПРОГРАММЫ, КАКИМ БЫ БОЛЬШИМ ОН НИ
БЫЛ.
ПРИ ВЫПОЛНЕНИИ КОМАНДЫ RUN ИЛИ GET KMON ПРОВЕРЯЕТ ВОЗ-
МОЖНОСТЬ ПЕРЕКРЫТИЯ ЕГО ЗАГРУЖАЕМОЙ ПРОГРАММОЙ. ЕСЛИ ЭТО
ИМЕЕТ МЕСТО, ТО KMON ПЕРЕСЫЛАЕТ ПЕРЕКРЫВАЮЩИЕ БЛОКИ ПРОГ-
РАММЫ В ФАЙЛ СВОПИНГА SWAP.SYS. ПОСЛЕ ВЫПОЛНЕНИЯ ВСЕХ НЕОБ-
ХОДИМЫХ ОПЕРАЦИЙ KMON, ПЕРЕД ПЕРЕДАЧЕЙ УПРАВЛЕНИЯ RMON,
ПРОИЗВОДИТ СЧИТЫВАНИЕ В ПАМЯТЬ ТЕХ БЛОКОВ ПРОГРАММЫ, КОТО-
РЫЕ БЫЛИ ЗАПИСАНЫ В ФАЙЛ SWAP.SYS И ОБМЕНИВАЛИСЬ С БЛОКАМИ
KMON И, ВОЗМОЖНО, USR.
В СЛУЧАЕ ВЫПОЛНЕНИЯ КОМАНДЫ R, KMON НЕ ВЫБИРАЕТ КАРТУ
ЗАГРУЗКИ ДЛЯ ПРОСМОТРА, КАКИЕ БЛОКИ ФАЙЛА ДОЛЖНЫ ЗАГРУЖАТЬ-
СЯ. ВМЕСТО ЭТОГО ОН ОБРАЩАЕТСЯ К RMON И СЧИТЫВАЕТ ВСЮ
ИНФОРМАЦИЮ В ПАМЯТЬ СВЫШЕ 1000 АДРЕСА (КОМАНДА R НЕ ИСПОЛЬ-
ЗУЕТ ФАЙЛ SWAP.SYS). МОНИТОР СЧИТАЕТ, ЧТО KMON И USR БЫЛИ
УЖЕ ВЫГРУЖЕНЫ, И НАЧИНАЕТ ВЫПОЛНЕНИЕ ПРОГРАММЫ.