![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Ассемблеры
Составлять программы гораздо удобнее, если наряду с символическими именами для команд, называемых мнемоническими кодами операций, можно употреблять для обозначения адресов в командах также символические имена, а не числовые значения. Например, чтобы загрузить содержимое ячейки памяти 538616 в аккумулятор, в нашем иллюстрированном микропроцессоре нужно выполнить команду из трех байтов 705386 (в шестнадцатеричном представлении). Естественно, более удобна и наглядна запись этой команды в виде LDR О, Мы можем получить эти удобства, если будем располагать некоторым средством, подставляющим числовые значения вместо символических имен (операций и адресов) после того, как программа уже написана. Это и составляет основную функцию программы-ассемблера. Программа, написанная в новой удобной форме, называется программой на языке ассемблера, а каждая команда называется предложением на языке ассемблера или оператором на языке ассемблера. Вообще говоря, программа на языке ассемблера — это, по существу, та же программа на машинном языке с символическими именами для адресов операндов, символическими именами для адресов команд и мнемоническими кодами операций. Задача ассемблера — заменить каждый мнемонический код операции соответствующим машинным кодом операции, отвести ячейки для каждой команды и каждого операнда и подставить вместо символических адресов их числовые значения. Как правило, между предложениями на языке ассемблера и командами на машинном языке существует взаимооднозначное соответствие. Однако бывают случаи, когда по одному предложению ассемблер генерирует несколько машинных команд. На рис. 5.6 показана схема использования ассемблера. Программа на языке ассемблера называется исходной программой, а генерируемая программа на машинном языке — объектной программой. Ассемблер, выполняющий функции транслятора и сам являющийся программой, загружается в компьютер вместе с исходной программой.
Рис. 5.6. Схема использования ассемблера. X, где LDR — мнемонический код операции, 0 — обозначение общего регистра, а X — символическое обозначение ячейки памяти 5386
Исходная программа выступает в роли «данных», обрабатываемых программой-ассемблером. В результате генерируется объектная программа. Когда ассемблер работает на том же компьютере, что и объектная программа, он называется собственным ассемблером. Однако часто ассемблер бывает написан для большой универсальной ЭВМ, выполняющей процесс трансляции. Такой ассемблер называется кросс-ассемблером. В процессе трансляции ассемблер использует таблицы для присваивания числовых значений мнемоническим кодам операций и символическим адресам. В ассемблер всегда включается таблица со всеми допустимыми мнемоническими кодами операций и соответствующими им числовыми значениями. Так что замена операций выполняется просто. Для того чтобы присвоить числовое значение каждому символическому адресу, ассемблер сначала составляет так называемую таблицу имен, в которую заносит все встреченные в программе символические адреса. Затем он отводит область памяти для программы, вычисляет значения для всех символических адресов и после этого выполняет соответствующую подстановку. Одно из главных преимуществ языка ассемблера заключается в легкости, с какой делаются вставки и удаления предложений в исходной программе. При написании программы часто обнаруживается, что в некоторую точку уже написанной части программы нужно вставить группу команд. В программе на машинном языке это потребует сдвига всех слов программы ниже вставленных команд. Более того, может оказаться, что адресные поля некоторых команд в программе (если, например, есть циклы или переходы) теперь должны ссылаться на переместившиеся команды. Это значит, что все такие адресные поля нужно откорректировать. В программе на языке ассемблера подобных проблем не возникает, поскольку адресам не даются числовые значения. Следовательно, при вставках предложений никаких трудностей не возникает. Точно так же трудностей не возникает и при выбрасывании предположений. Другое полезное свойство многих ассемблеров — это обнаружение ошибок. Конечно, ассемблер не может обнаружить логических ошибок в самом замысле программы; однако он может проверять соблюдение определенных синтаксических ограничений, наложенных на язык, и сообщить программисту об их нарушениях.
|