Всего на сайте:
248 тыс. 773 статей

Главная | Информатика

Ассемблеры  Просмотрен 172

Составлять программы гораздо удобнее, если наряду с символи­ческими именами для команд, называемых мнемоническими кодами операций, можно употреблять для обозначения адресов в командах также символические имена, а не числовые значения. Например, что­бы загрузить содержимое ячейки памяти 538616 в аккумулятор, в нашем иллюстрированном микропроцессоре нужно выполнить команду из трех байтов 705386 (в шестнадцатеричном представлении). Естест­венно, более удобна и наглядна запись этой команды в виде LDR О,

Мы можем получить эти удобства, если будем располагать некоторым средством, подставляющим числовые значения вместо символических имен (операций и адресов) после того, как программа уже написана. Это и составляет основную функцию программы-ассемблера. Програм­ма, написанная в новой удобной форме, называется программой на язы­ке ассемблера, а каждая команда называется предложением на языке ассемблера или оператором на языке ассемблера.

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

На рис. 5.6 показана схема использования ассемблера.

Программа на языке ассемблера называется исходной программой, а генерируемая программа на машинном языке — объектной программой. Ассемблер, выполняющий функции транслятора и сам являющийся программой, загружается в компьютер вместе с исходной программой.

 

 

Рис. 5.6. Схема использования ассемблера. X,

где LDR — мнемонический код операции, 0 — обозначение общего регистра, а X — символическое обозначение ячейки памяти 5386

 

Исходная программа выступает в роли «данных», обрабатываемых программой-ассемблером.

В результате генерируется объектная программа. Когда ассемблер работает на том же компьютере, что и объектная программа, он называется собственным ассемблером. Однако часто ассемблер бы­вает написан для большой универсальной ЭВМ, выполняющей про­цесс трансляции. Такой ассемблер называется кросс-ассемблером.

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

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

В программе на языке ассемблера подобных проблем не возникает, поскольку адресам не даются числовые значения. Следовательно, при вставках предложений никаких трудностей не возникает. Точно так же трудностей не возникает и при выбрасывании предположений.

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

Предыдущая статья:Программа-загрузчик Следующая статья:Программа на языке ассемблера, соответствующая
page speed (0.0149 sec, direct)