Файл: 16. Особенности ассемблирования.pdf

ВУЗ: Не указан

Категория: Учебное пособие

Дисциплина: Программирование

Добавлен: 30.10.2018

Просмотров: 256

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

16. Особенности ассемблирования многомодульных программ 

Важнейшей  особенностью  многомодульных  программ  является 

использование  перекрестных  связей  между  модулями.  Эти  связи 

обеспечиваются  за  счет  общих  и  внешних  имен  модулей.  Общие  имена 

модуля  –  это  имена,  определенные  в  данном  модуле  и  могущие 

использоваться в других модулях. Описание таких имен явно выполняется в 

начале модуля с помощью директивы  PUBLIC. Наоборот, внешние имена  – 

это  имена,  используемые  в  данном  модуле  в  качестве  операндов  команд, 

тогда  как  определение  этих  имен  выполняется  в  других  модулях.  Внешние 

имена  также  должны  быть  определены  в  начале  модуля  с  помощью 

директивы  EXTRN.  Использование  этих директив немного  изменяет  логику 

работы АП.  

Прежде  всего,  при  обработке  начальных  строк  исходного  текста, 

содержащих описание общих и внешних имен модуля, АП должна сохранить 

эти  имена  в  какой-либо  внутренней  структуре,  например  –  динамическом 

списке.  

Во-вторых,  на  втором  проходе  изменяется  логика  обработки 

символических  операндов.  Если  при  поиске  имени  в  ТСИ  оно  не  будет 

найдено, то поиск продолжается в списке внешних имен, и только если и там 

имя  не  будет  найдено,  то  только  тогда  генерируется  сообщение  об  ошибке. 

Если же анализируемое имя действительно является внешним, то вместо его 

адреса  (неизвестного  при  ассемблировании  данного  модуля!)  в  команду 

подставляется нулевое значение и в выходной модуль заносится специальная 

информация об этой команде и используемом в ней имени. Эта информация 

должна содержать адрес операндной части такой частично сформированной 

команды  и  использованное  в  ней  внешнее  имя.  Набор  таких  пар  адрес-имя 

образуют  в  выходном  объектном  модуле  специальный  раздел  –  таблицу 

внешних  имен  (ТВИ)  модуля.  Эта  важнейшая  таблица  будет  в  дальнейшем 

использоваться при компоновке модулей.  


background image

Кроме ТВИ, в выходном модуле АП должна создать еще одну таблицу – 

таблицу общих имен (ТОИ). Эта таблица должна содержать набор пар типа 

имя-адрес,  т.е.  список  всех  объявленных  в  модуле  общих  имен  и 

назначенных  им  адресов.  Таблица  легко  строится  на  основе  ТСИ  и  списка 

общих имен. 

Наконец,  в  объектном  модуле  должна  быть  еще  одна  таблица  –  так 

называемая  таблица  перемещений  (relocation  table).  Она  должна  содержать 

адреса  всех  операндов,  где  использовались  символические  имена. 

Необходимость  этой  таблицы  объясняется  тем,  что  при  замене 

символических  операндов  соответствующими  адресами  эти  адреса  носят 

относительный  характер,  т.е.  привязаны  к  началу  данного  модуля.  При 

объединении объектных модулей компоновщиком (раздел 5) эти адреса надо 

будет  изменить  и  поэтому  в  объектном  модуле  и  приходится  запоминать 

изменяемые операнды. 

 

В 

итоге, 

создаваемый 

объектный 

модуль 

будет 

иметь 

“полуфабрикатный” вид, т.к. часть команд в нем будут сгенерированы лишь 

частично. Тем самым, объектный модуль имеет двоично-символический вид, 

т.е. содержит не только двоичные данные и команды, но и дополнительную 

символьную  информацию,  необходимую  для  последующей  обработки 

компоновщиком.  Полный  формат  объектного  модуля  можно  представить 

следующим образом: 

 

заголовок с именем модуля, его длиной и адресом точки входа 

 

таблицу общих имен как набор пар вида имя-адрес 

 

таблицу внешних имен как набор пар вида адрес-имя 

 

таблицу перемещений как набор адресов модифицируемых операндов 

 

тело модуля, содержащее набор двоичных данных и команд