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

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

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

Добавлен: 30.10.2018

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

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

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

17. Реализация однопроходной схемы работы ассемблера 

Суть однопроходной схемы состоит в запоминании некоторым образом 

тех  команд,  где  используются  неопределенные  на  момент  обработки  этих 

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

как  имя  станет  определенным.  Для  этого  структура  базовой  таблицы 

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

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

тех  операндов,  где  используется  данное  имя.  Тем  самым,  ТСИ  из  массива 

записей  превращается  в  массив  линейных  списков.  Ясно,  что 

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

поэтому для имен областей памяти с данными они не нужны. Например, если 

в  кодовом  сегменте  встречаются  ссылки  вперед  на  метки  L1  и  L4,  то 

усложненная ТСИ будет содержать следующую информацию: 

симв.  

имя 

адрес 

 

доп.  

инф. 

начало 

списка 

N1 

00 00 00 00   

N2 

00 00 00 02   

L1 

нет 

 

 

L2 

00 00 2A 

CD 

 

L3 

00 00 40 80   

L4 

нет 

 

 

 

Алгоритм обработки строк с командами должен включать следующие шаги. 

 

анализ поля метки и выделение имени-метки (если оно есть) 

 

поиск метки в ТСИ со следующими возможными ситуациями: 

если метка отсутствует в ТСИ, то она туда добавляется вместе с 

соответствующим адресом (текущее значение переменной СА) и 

далее считается определенной 

адрес операнда 
с именем L1

 

адрес операнда 
с именем L1

 

адрес операнда 
с именем L4

 


background image

если метка есть в ТСИ и ей уже назначен адрес, то генерируется 

ошибка типа “Дважды определенная метка” 

если  метка  есть  в  ТСИ,  но  ей  еще  адрес  НЕ  назначен,  то 

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

поэтому  организуется  просмотр  вспомогательного  списка,  из 

которого  выбираются  адреса  операндов  с  данной  меткой  и  по 

этим адресам заносится адрес, назначенный данной метке; после 

этого вспомогательный список уничтожается за ненадобностью 

 

выделение и обработка поля кода команды обычным образом 

 

обработка операндов команды, причем при появлении среди операндов 

символического имени, оно обрабатывается следующим образом: 

организуется  поиск  имени  в  ТСИ  со  следующими  возможными 

результатами: 

  имя  в  ТСИ  отсутствует  (ситуация  первой  ссылки  вперед), 

оно  туда  заносится  БЕЗ  назначения  адреса  и  создается 

первый  элемент  вспомогательного  списка  с  адресом 

операнда 

  имя  в  ТСИ  есть,  является  неопределенным  (адрес  не 

назначен),  что  является  признаком  появления  еще  одной 

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

вспомогательный 

список 

дополняется 

еще 

одним 

элементом с адресом текущего операнда 

  имя  в  ТСИ  есть  и  является  определенным,  тогда  просто 

происходит занесение его адреса в машинную команду 

 

при  достижении  конца  модуля  выполняется  просмотр  ТСИ  с  целью 

проверки, не остались ли в ней неопределенные имена  – эта ситуация 

должна рассматриваться как ошибочная 

В  целом,  несмотря  на  более  сложную  логику,  однопроходная  схема 

является  более  предпочтительной  и  поэтому  именно  она  используется  в 

реальных ассемблерах.