ПРИЛОЖЕНИЕ D
СПЕЦИАЛЬНЫЕ ВОПРОСЫ
В данном Приложении содержится информация по следующим вопросам:
Поддержка механизма модульности
Уровни доступа
Слова расширения
Использование команд CAS/CAS2 в системных программах
D.1 ПОДДЕРЖКА МЕХАНИЗМА МОДУЛЬНОСТИ
Процессор MC68020 располагает специальными средствами модульной организации программ - это команды вызова модуля (CALLM) и возврата из модуля (RTM). При выполнении CALLM используется ссылка на т.н. дескриптор модуля, содержащий управляющую информацию, необходимую для входа в вызываемый модуль. Командой
CALLM создается стековое окно модуля, в котором запоминается состояние вызывающего модуля, после чего из указанного дескриптора загружается состояние нового модуля. По команде RTM по стековому окну восстанавливается состояние, предшествовавшее вызову, и управление возвращается в вызывающий модуль.
Поддерживаемый процессором MC68020 межмодульный интерфейс дает возможность проводить достаточно тонкие различия между уровнями доступа программных модулей (см. D.2 УРОВНИ ДОСТУПА) за счет использования внешних аппаратных средств. Информацию об уровне доступа процессор MC68020 непосредственно не интерпретирует, однако при необходимости он устанавливает связь с некоторым внешним устройством, возлагая на него проверку, допустимо ли предполагаемое изменение уровня доступа.
D.1.1 Дескриптор модуля
На Рис.D-1 показан формат дескриптора модуля. Первое длинное слово содержит управляющую информацию, используемую при выполнении команды CALLM. Далее могут следовать длинные слова с данными, загружаемыми командой CALLM в различные регистры процессора.
Поле дискриминанта (Дискрим) определяет способ передачи аргументов в вызываемый модуль; процессором MC68020 распознаются только комбинации 000 и 100, прочие порождают исключения формата. Комбинация 000 означает, что значения аргументов должны быть переданы от вызывающего модуля вызываемому через стек, причем они должны располагаться непосредственно под стековым окном модуля. В случае изменения указателя стека при вызове модуля процессор копирует аргументы из старого стека в новый.
Комбинация 100 означает, что вызываемый модуль должен получить доступ к передаваемым аргументам посредством косвенного указателя, помещенного в стек вызывающего модуля. Аргументы при этом не копируются, а значение указателя стека вызывающего модуля процессор помещает в стековое окно модуля.
31 28 23 15 0
--------T-------T------------------T----------------¬
база --> ¦Дискрим¦ Тип ¦ Уровень доступа ¦ Резерв(нули) ¦
+-------+-------+------------------+----------------+
+$04 ¦ Указатель входного слова модуля ¦
+---------------------------------------------------+
+$08 ¦ Указатель области данных модуля ¦
+---------------------------------------------------+
+$0C ¦ Указатель стека модуля (необязательный) ¦
+---------------------------------------------------+
+$10 ¦ Дополнительная информация, ¦
¦ определяемая пользователем ¦
L---------------------------------------------------Рис.D-1. Формат дескриптора модуля
Поле типа задает тип дескриптора: процессором MC68020 распознаются только дескрипторы типа $00 и $01. Дескриптор типа $00 определяет модуль, при вызове которого права доступа не изменяются, а его стековое окно помещается в стек вызывающего модуля.
Дескриптор типа $01 определяет модуль, при вызове которого допустимо изменение прав доступа, и который, в частности, может иметь отдельную область стека.
Поле уровня доступа используется только в дескрипторе типа $01
и передается внешнему устройству для изменения прав доступа.
Указатель входного слова модуля задает адрес точки входа в вызываемый модуль. Первое слово по адресу входа (см. Рис.D-2) определяет регистр, который должен быть сохранен в стековом окне модуля и в который затем должен быть загружен указатель области данных дескриптора модуля; первая команда модуля начинается со следующего слова. Указатель области данных дескриптора модуля содержит адрес области данных вызываемого модуля.
Если изменение уровня доступа предусматривает изменение указателя стека, то старое значение будет сохранено в стековом окне модуля, а новое значение будет взято из поля указателя стека дескриптора модуля. Остальная информация в дескрипторе модуля определяется пользователем.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
----T----------T---T---T---T---T---T---T---T---T---T---T---T--¬
¦D/A¦ регистр ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0¦
+---+----------+---+---+---+---+---+---+---+---+---+---+---+--+
¦ операционное слово первой команды ¦
L-------------------------------------------------------------Рис.D-2. Входное слово модуля
Типы дескрипторов модулей с $10 по $1F зарезервированы для определения пользователем и вызывают исключение ошибки формата.
Это дает возможность пользователю отключать любой модуль путем установки единственного бита в дескрипторе, без потери информации в дескрипторе.
Если нет необходимости загрузки в регистр указателя области данных при входе в вызываемый модуль, то во входном слове модуля следует указать регистр A7 (т.е. SP). В этом случае по создании и заполнении стекового окна модуля загруженное значение будет замещено правильным значением указателя стека.
D.1.2 Стековое окно модуля
На Рис.D-3 показан формат стекового окна модуля. Это окно создается командой CALLM и удаляется командой RTM. Два первых длинных слова содержат управляющую информацию, передаваемую командой CALLM команде RTM. Указатель дескриптора модуля содержит адрес дескриптора, используемый при вызове модуля. Все остальные элементы содержат информацию, которая должна быть восстановлена при возврате в вызывающий модуль.
15 12 7 0
------------T-------------------T-----------------------¬
SP -> ¦ Дискрим ¦ Тип ¦ Сохраненное значение ¦
¦ ¦ ¦ уровня доступа ¦
+---T---T---+---T---T---T---T---+-----------------------+
¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ Коды условий ¦
+---+---+---+---+---+---+---+---+-----------------------+
¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ Суммарная длина ¦
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ аргументов ¦
+---+---+---+---+---+---+---+---+-----------------------+
¦ (зарезервировано) ¦
+-------------------------------------------------------+
+$08 ¦ ____ Указатель дескриптора модуля ____ ¦
¦ ¦
+-------------------------------------------------------+
+$0C ¦ ____ Сохраненное значение программного счетчика ____¦
¦ ¦
+-------------------------------------------------------+
+$10 ¦ ____ Сохраненное значение указателя ____ ¦
¦ области данных модуля ¦
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.