Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по АК.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
752.64 Кб
Скачать

Способы ассемблирования

По способам ассемблирования ассемблеры делятся на одно- и двухпроходные в зависимости от способа решения так называемой проблемы ссылок вперед. При организации разветвляющихся и циклических процессов используются команды условного перехода. В случае ссылки назад или цикла с постусловием транслятор находит метку до того, как найдет команду условного перехода, которая использует эту метку, и заранее зная на какую ячейку памяти программывыполняется переход, нормальнооттранслирует команду условного перехода. Если выполняется ссылка вперед, транслятор не знает на какую ячейку адресуется метка команды и не может ее оттранслировать.

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

Однопроходной ассемблер, когда ему попадается ссылка вперед, не выполняет транслюцию команды, а оставляет место под соответствующий машинный код и переписывает ее в специальную таблицу с указанием места, откуда эта команда была взята. Когда транслятору попадается метка с точкой входа, транслятор доопределяет соответствующую запись в таблице и дописывает пропущенную команду на ее место. При повторной встречи уже определенной метки, команда перехода транслируется сразу. Значение метки при этом берется из таблицы.

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

Макроопределение – метод присвоения имени некоторому участку кода.

Макрос состоит из трех частей:

  1. Псевдокоманды заголовка макроса, задающего имя макроса.

  2. Текст, составляющий тело макроса.

  3. Псевдокоманды конца макроса.

Макровызов – использование макроса в теле основной программы.

Макровызов считается псевдокомандой.

Макрорасширение – процесс замены макровызова на тело макроса. Оно производится во время трансляции.

Для многих макросов необходимо изменять внутренний текст, как правило относящийся к адресам или именам регистров. Для этого используются т.н. макросы с параметрами. В заголовке макроса указывается одно или несколько (до 8) символических имен, которые затем используются в теле макроса. При вызове макроса в ходе программы в порядке следования входящих переменных макроса указываются необходимые адреса, названия регистров или метки, которые во время макрорасширения ставятся на места использования входящих переменных макроса.

Условное макрорасширение (в языке Ассемблера – условное ассемблирование) – механизм, позволяющий проводить макрорасширения с различным содержимым в зависимости от управляющих параметров.

Вложенные макровызовы – механизм, позволяющий использовать макровызовы внутри макросов.

Циклические макросы (макросы с модифицированными параметрами) – отличительная их особенность в том, что при вызове транслятор сам способен модифицировать входящие параметры, прибавляя к их именам индексы, что позволяет организовать циклический вызов макроса.

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