Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Программирование на языке ассемблера




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

Ассемблеры

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

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

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

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

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

 

 

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

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

 

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

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

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

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

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

Язык ассемблера

Чтобы проиллюстрировать тесную взаимосвязь между языком ас­семблера и языком машинных команд, обратимся снова к программе вычисления суммы 10 чисел из разд. 3. Программа была приведена в табл. 5.3, причем именно загружаемая в микрокомпьютер программа приведена в графе «команды на машинном языке».

Программа на языке ассемблера для того же примера приведена в табл. 5.9. Каждая строка соответствует одному предложению на языке ассемблера. Как легко заметить, предложение состоит из четы­рех полей: поля метки, поля операции, поля операндов и поля ком­ментария.

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

 

Таблица 5.9

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...