ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕРЫ Z8 М.Гладштейн г.Рыбинск Часть 3. Кросс-ассемблер asmS8 3.1. Синтаксис языка ассемблера Основной компонент программы на языке ассемблера asmS8 - оператор. Оператор может иметь длину до 128 символов и заканчиваться символом конца строки. Оператор может включать 4 поля, в которых указываются: - метка оператора; - код операции (мнемоника); - операнды; - комментарий. Метка отделяется от кода операции двоеточием или пробелом, код операции от операндов - пробелом, операнды разделяются запятой, а комментарий начинается с точки с запятой. Все поля являются необязательными. Ассемблер имеет свободный формат, поэтому поле метки и поле комментария может начинаться с любой колонки, однако, код операции и операнды не могут начинаться с первой колонки. 3.1.1. Символические обозначения Символические идентификаторы, используемые в программе, могут обозначать коды операций команд, псевдокоманды, специальные символы и метки. Идентификатор может иметь длину до 127 символов, должен содержать одну и более буквы латинского алфавита, может содержать цифры и знаки: запятая (,), знак доллара ($), знак вопроса (?), знак подчеркивания (_), точку (.), знак (@) или апостроф ('). Прописные и строчные буквы рассматриваются как разные и все символы идентификатора являются значащими. Единственным ограничением на символические идентификаторы является то, что они не могут начинаться с цифры или апострофа ('). Идентификаторы кодов операций команд микроконтроллера (МК) соответствуют приведенным в [1,2] (размер букв здесь не имеет значения). Любой оператор, на который ссылается другой оператор, должен быть помечен меткой. При этом один оператор может содержать более чем одну метку. Метка - это символический идентификатор, который может представлять: - адрес (до 16 бит); - порт ввода/вывода; - число с плавающей запятой; - другие значения до 80 значащих бит. Если метка сопровождается двоеточием, то она может начинаться с любой колонки. Если двоеточие не используется, то метка должна начинаться с первой колонки. Метки регистров специального назначения МК должны соответствовать данным [3]. Следует отметить, что в ассемблере определены только метки регистров стандартного регистрового файла, причем размер букв не имеет значения. Для таких меток единственная допустимая операция в выражениях - это индексирование. Идентификаторы кодов операций могут быть свободно использованы как метки, т.к. ассемблер различает, когда символьная строка используется как код операции, а когда - как метка. Мнемонические обозначения условий в командах перехода должны соответствовать приведенным в [2]. Размер букв здесь также не имеет значения. 3.1.2. Операции и операнды Операция - это мнемоника, которая описывает команду. Операция может сопровождаться одним или двумя операндами. Операндами в программном операторе могут являться: - данные для обработки (непосредственная адресация); - адрес операнда-источника; - адрес операнда-приемника; - адрес команды, на которую следует передать управление; - код условия ветвления программы. Основное соглашение, принятое в ассемблере относительно порядка указания операндов, заключается в том, что операнд-приемник всегда предшествует операнду-источнику. 3.1.3. Комментарии Комментарии - это любая строка символов, предваряемая знаком "точка с запятой" (;). Комментарии не имеют никакого значения для процесса ассемблирования, они используются только для целей документирования программы. Комментарий может начинаться с любой колонки строки, и оператор может состоять только из комментария. Комментарий заканчи¬вается символом конца строки. 3.1.4. Арифметические выражения Ассемблер asmS8 имеет богатый набор операторов для использования в арифметических выражениях. Выражения и операторы Результат арифметического выражения - это целое число длиной до 80 бит. При выполнении арифметическое выражение просматривается слева направо. При этом соблюдается следующий порядок выполнения: а) Операторы и операнды накапливаются. Как только находится оператор, имеющий больший или равный приоритет по сравнению с последним выполненным оператором, вычисление менее предпочтительных операций откладывается до тех пор, пока новый оператор не будет выполнен. б) Сначала выполняются префиксные операции справа налево (изнутри наружу), затем постфиксные и инфиксные операции выполняются слева направо. в) Операнды (метки и подвыражения в скобках) рассматриваются как имеющие уровень приоритета 0 (наивысший приоритет). Операторы и их приоритет (порядок выполнения) даны в табл.1. Арифметические операции для чисел с плавающей точкой в ассемблере не определены. Булево значение выражения считается "ложь", если проверка дает нуль, иначе - "истина". Для целей условного ассемблирования и логических операций принято, что ненулевой результат всегда рассматривается как "истина". Скобки могут быть использованы как для группирования операторов, так и для изменения порядка их выполнения. Индексирование (круглые или квадратные скобки) может применяться к строкам для выделения отдельных символов или для индекс¬ной адресации. Операторы типа выражения (подобные ^BYTE) могут быть использованы для указания ассемблеру, что ссылка вперед или внешняя ссылка имеет определенный формат. Операторы ^FDW и ^EXT возвращают 1, если их операнд действительно является ссылкой вперед или внешней ссылкой, в противном случае они дают 0. Ассемблер не дает ограничений на режимы перемещения целых операндов, так как компоновщик способен поддерживать целочисленные арифметические операции над переместимыми или внешними симво¬лами. Однако операции над строками не выполняются компоновщиком. Константы Ассемблер поддерживает следующие виды констант: целые числа, числа с плавающей точкой, символы и строки символов. Целые числа должны начинаться с цифры (при этом первой цифрой может быть 0) и могут содержать постфикс-индикатор системы счисления: B - двоичная; D,E - десятичная; H или X - шестнадцатеричная; O или Q - восьмеричная. Индикаторы и шестнадцатеричные цифры могут выражаться как строчными так и прописными буквами. По умолчанию (т.е. без индикатора) число считается десятичным. Числа с плавающей точкой начинаются с цифры и содержат десятичную точку. Они могут содержать необязательную букву Е (или е), сопровождаемую необязательным знаком и значением порядка. Числа с плавающей точкой указываются в десятичной системе счисления. Символы и строки символов заключаются в кавычки или апострофы. Символ ($) или (.) дает текущее значение счетчика ячеек программной памяти (соответствует адресу, по которому загружается первый байт кода оператора). Любой из этих символов может быть указан как операнд в арифметическом выражении (это, однако, не подразумевает использование относительной адресации). Значения арифметических выражений вычисляются во время ассемблирования или компоновки. 3.2. Псевдокоманды Ассемблер asmS8 разрешает использование псевдокоманд. Эти псевдокоманды не генерируют объектный код, а задают определенные действия, которые выполняет ассемблер. Псевдокоманды имеют тот же формат строки, что и стандартные команды (метка, код операции, операнды, комментарий). Код операции псевдокоманды может начинаться с любой колонки, кроме колонки 1. При описании псевдокоманд использованы аббревиатуры, значение которых указано в табл.2. Ассемблер поддерживает псевдокоманды размещения, псевдокоманды структурирования, псевдокоманды определения меток, псевдокоманды определения данных, псевдокоманды резервирования адресного пространства, псевдокоманды условного ассемблирования, управляющие псевдокоманды, псевдокоманды макрокоманд [4]. Краткие сведения о важнейших псевдокомандах помещены в табл.3. Мнемоника каждой псевдокоманды начинается со знака "." (точка). 3.3. Вызов ассемблера Ассемблер asmS8 принимает различные параметры в командной строке, влияющие на ассемблирование, создание листинга, создание объектного файла в универсальном формате, пригодного для исполь¬зования такими утилитами как загрузчик. Ассемблер вызывается следующей командной строкой: asmS8 [ option ... ] file , где : option - параметр, file - имя файла исходной программы. Значения параметров приведены в табл.4. 3.4. Формат листинга Ассемблер производит листинг исходной программы вместе с генерируемым объектным кодом. Формат листинга содержит различные поля : заголовок, счетчик ячеек (LOC), объектный код (OBJ CODE), номер оператора (LINE #) и исходный оператор (SOURCE). Они содержат следующее : а) Заголовок имеется на первой странице листинга и состоит из даты, времени, года, имени файла, номера страницы, а также содержит обозначения полей LOC, OBJ CODE, LINE # и SOURCE. б) Поле LOC содержит значения счетчика ячеек. в) Поле OBJ CODE содержит генерируемый объектный код. Если оператор не генерирует объектный код, это поле - пусто. Переместимое значение представляется как Rssss+nnnnnnnn, где ssss - но¬мер секции, nnnnnnnn - смещение в секции. Внешние символы помеча¬ются литерой "x" с заглавной "X", помечающей первый байт. Ссылки вперед помечаются аналогично литерой "w". Звездочкой (*) помечаются другие выражения, вычисляемые компоновщиком, которые не являются просто переместимыми. г) Поле LINE # содержит последовательный номер каждой строки исходной программы, начиная с 1. д) Поле SOURCE содержит исходные строки на языке ассемблера, включая метки, коды операций, операнды и комментарии. 3.5. Сообщения ассемблера об ошибках Сообщения об ошибках выводятся на терминал и в листинг. В табл. 5 приведены сообщения об ошибках и их значение. ЛИТЕРАТУРА 1. Гладштейн М.А. Z8 - микроконтроллеры широкого применения. - Радио, 1997, N5, с.27 - 29. 2. Гладштейн М.А. Программируем микроконтроллеры Z8. Часть 1. Система команд микроконтроллеров Z8. 3. Гладштейн М.А. Изучаем микроконтроллеры Z8. Часть 1. Адресное пространство микроконтроллеров.- Радио, 1999, N 7. 4. Z8 Microcontrollers. User's Manual. - Zilog Inc., 1995.
Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов!
Подробно тут!