Материал: Однокристальные микроконтроллеры с RISC-архитектурой. Часть 2. Введение в программирование. Кравченко В.И

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

2. Зык ассемблера для pic-процессоров

2.1. Общие сведения

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

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

Так как внутренние физические и логические компоненты, из которых состоит МК аналогичны любому другому однокристальному МП, то и машинно-ориентированный язык программирования Ассемблер для PIC-процессоров содержит много общих черт с Ассемблерами для других процессоров [2].

Ассемблер для PIC-процессоров включает в себя три компоненты:

  • Мнемоника инструкций;

  • Директивы;

  • Макроопределения.

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

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

Макрокоманда состоит из последовательности команд, объединенной одним именем. Пассивные данные (параметры) передаются макрокоманде непосредственно в том месте программы, где она используется. Макрокоманды обеспечивают следующие преимущества:

- высокий уровень абстракции, который улучшает читаемость, обеспечивает простоту реализации и большую надежность;

- последовательное решение часто используемых функций;

- простота изменений.

10

В пособии рассматривается одна из версий языка Ассемблера для PIC-процессоров – MPALC. Программное средство MPALC имеет следующие основные характеристики:

- переводит исходную программу, написанную на языке Ассемблера, в машинный исполняемый код (объектный код) с использованием IBM-совместимой ПЭВМ, работающей под управлением MSDOS версии 3.31 и выше.

- генерирует объектный код в четырех разных форматах для обеспечения совместимости с другими программными средствами и использования в инструментальных средствах программирования МК;

- обеспечивает настройку и генерирует объектный код для различных типов МК семейства PIC-процессоров, включая PIC16C54, PIC16C55, PIC16C56, PIC16C57, PIC16C71 и PIC16C84;

- обеспечивает полное отображение в объектном коде всех макрокоманд;

- поддерживает шестнадцатеричные (по умолчанию), десятичные и восьмеричные коды.

2.2. Вызов Ассемблера

Ассемблер вызывается следующей командой:

MPALC<имя_файла>[опции]

Вызываемый файл должен иметь расширение ‘ASM’. Между каждой опцией должен быть пробел.

Опции:

/? – отображение на экране краткой подсказки;

/p<процессор> - определяет тип используемого процессора (16C54, 16С55, 16С56, 16С57, 16С71 или 16С84). По умолчанию – 16С54;

/f<объектный формат> - определяет выходной формат для объектного файла: INHX16, INHX8S, INHX8M или PICICE. По умолчанию - INHX16. Формат INHX16 создает один 16-битный шестнадцатеричный файл. Этот формат используется в программном обеспечении для программатора PICPRO. Формат INHX8S создает два 8-битных шестнадцатеричных файла: один для младших байтов, а другой - для старщих с расширениями ‘obl’ и ‘obh’ соответственно. Этот формат полезен для генерации ППЗУ. Формат INHX8M создает один объединенный шестнадцатеричный файл с комбинацией младших и старших байтов. Этот формат используется для загрузки PIC16C5x при программировании ППЗУ. Формат PICICE формирует файлы, совместимые с PIC-ICE Эмулятором. В этом формате никакие сообщения

11

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

/w<уровень предупреждений> - определяет уровень предупреждений, которые выдаются в листинге. Есть четыре уровня предупреждений (сообщений): 0 – комментарий; 1 – предупреждения; 2 – фатальные; 3 – критические. Сообщения выдаются с заявленного уровня и выше. По умолчанию – уровень 1.

/w-<код ошибки> - форма сообщения об ошибке. Код ошибки может быть любым числом от 0 до 64. Коды ошибок приведены в приложении 1.

/r<основание> - определяет по умолчанию основание для констант. Основание может быть DEC, OCT или HEX. Значение по умолчанию – HEX.

/t<ширина_табуляции> - определяет, что табуляция в исходном файле должна быть заменена пробелами. <Ширина_табуляции> - количество пробелов для замены табуляции.

/i – определяет, что все символы будут нечувствительными. По умолчанию – чувствительные.

/d<имя_метки=величина_метки> - определяет метку и ее величину. При генерации семейства программ метки командной строки могут использоваться, чтобы управлять условным ассемблированием или устанавливать критические константы.

2.3. Выходные файлы Ассемблера

Ассемблер создает различные выходные файлы со следующими расширениями:

.obj – объектный файл;

.obh и .obl – пары данных для старших и младших байтов при исполь-

зовании INHX8S-формата;

.lst – файл листинга;

.erl – файл ошибок и предупреждений;

.sim – символьный файл, производимый с использованием

форматов INHX16 и INHX8M;

.ref - файл символьных ссылок, производимых с PIC-ICE

выходным форматом;

.MAP – отображаемый двоичный отладочный файл, произво-

димый только с PIC-ICE-форматом.

12

2.4. Формат строки Ассемблера

Исходные коды программы на языке Ассемблера разделяются на четыре базовые области:

  • область метки;

  • область команд;

  • область операнда;

  • область комментариев.

Общий формат для программной строки Ассемблера:

[ <метка>] <команда> [<операнд>] [;<комментарий>]

Пример:

Data EQU 0x03 ; присваивание метке числового значения

Start ; начало программы

movlw Data ; пример инструкции (команды)

goto Start ; продолжение программы (зацикливание)

END ; конец программы

Поле метки в MPALC-ассемблере может начинаться в любом столбце исходной строки. Расположение меток и макроимен становится зависимым, если в командной строке стоит опция /i.

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

<метка> - имя длиной 1-32 символа. Оно должно начинаться с буквы или

подчеркивания ‘_’, и может содержать любую комбинацию букв,

цифр или подчеркиваний. Примеры меток:

__Start

START

Start

<команда> - может быть мнемоникой машинного кода операции, директивой

Ассемблера или макрокомандой.

<операнд> - информация, используемая конкретным кодом операции, дирек-

тивой Ассемблера или макрокомандой. Если необходим более,

чем один операнд, они отделяются друг от друга запятой и

дополнительно одним или более пробелов или табуляцией.

13

<комментарий> - дополнительная область, содержащая любые выводимые

символы. Все, что находится после символов ‘;’ (точка с

запятой), рассматривается как комментарий и игнорирует-

ся Ассемблером. Область комментария должна отделять-

ся от предыдущей области по крайней мере одним пробе-

лом или символом табуляции. Пустые строки также рас-

сматриваются как комментарий.

2.5. Константы

Ассемблер поддерживает шестнадцатеричные, десятичные, восьмеричные, двоичные и символьные константы. В объектном файле по умолчанию константам будет присваиваться шестнадцатеричное основание, если оно явно не определено в базовом коде. Константе может предшествовать знак плюс или минус. Константы без знака считаются положительными. Шестнадцатеричные числа должны начинаться с числа 0-9, в противном случае они будут интерпретироваться как символы. Обычно используется формат

0х<шестнадцатеричные цифры>.

Возможные представления констант с различными основаниями даны в табл. 2.1.

Таблица 2.1

Тип

константы

Синтаксис

Пример

Шестнадцатеричная

H’<hex-число>’

<hex-число>h

0x<hex-число>

H’9F’

900h

0x9FF

Десятичная

.<число>

.100

Восьмеричная

O’<octal-число>’

Q’<octal-число>’

<octal-число>O

<octal-число>Q

\<octal-число>

O’777’

Q’777’

777O

777Q

\777

Бинарная

B’<binary-число>’

<binary-число>B

b’00111001’

00111001B

Ассемблером непосредственно определены три символа для регистров и обозначения расположения – «встроенные символы». Эти символы следующие:

W и w – имеют величину нуля;

F и f - имеют величину единица;

Local – резервируется для использования в макроопределениях.

За исключением «Local», эти символы могут быть переопределены пользователем.

14

2.6. Символы и выражения

Символы используются в поле метки, в областях операнда, в качестве текущего программного адреса, а также в директивах и макрокомандах. Символы представлены строкой с одним или более текстовых символов с первым символом A-Z, a-z, ?.

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

‘+’ – представляет положительную величину (значение по умолча-

нию);

‘-‘ – представляет одноместный минус.

Операторы, используемые в выражениях, представлены в табл. 2.2.

Таблица 2.2

Оператор

Операция

Пример

+

+

-

-

%

*

/

<<

>>

( )

= =

!=

<=

>=

!

~

|

&

| |

&&

^

$

Сложение

Унарный плюс

Вычитание

Унарный минус

Модуль

Умножение

Деление

Сдвиг влево

Сдвиг вправо

Скобки

Логическое равенство

Логическое неравенство

Меньше или равно

Больше или равно

Отрицание (инверсия)

Дополнение

Включающее ИЛИ

Включающее И

Логическое ИЛИ

Логическое И

Исключающее ИЛИ

Текущее значение программного счетчика

3+4

+x

4-3

-x

3%5

3*4

¾

3<<4

3>>4

((3+4)/5)

x= =y

x!=y

x<=y

x>=y

!x

~x

x|y

x&y

x| |y

x&&y

x^y

$

Все операции используют 32-битные целые величины, следовательно, все доли вследствие деления будут исключаться. Если выражение дает переполнение, то выдается предупреждение. Следует помнить, что выражения в

15

Ассемблере выполняют только роль «калькулятора» на этапе ассемблирования и не сохраняются в объектном коде.

2.7. Директивы Ассемблера

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

Синтаксис:

IF <EXPR.>

<EXPR> - выражение MPALC.

Описание. Если выражение действительно, выполняется следующий собранный код. Если выражение ЛОЖНО и директива ELSE существует, выполняется следующий за директивой ELSE код. Сборка условного блока завершается директивой ENDIF.

Примеры:

IF win = = TRUE

movlw 0xF

movwf 0xA

ENDIF

_ _ _ _ _ _ _ _ _ _ _ _ _

IF VERSION = = 100

movlw 0x0A

movwf IO_1

ELSE

movlw 0x1A

movwf IO_2

ENDIF

END - конец программы или структуры

Синтаксис:

END

Описание. Директива END сообщает Ассемблеру, что последняя исходная строка была прочитана. Дополнительные записи, следующие после END, игнорируются.

EQU - определяет константу Ассемблера

Синтаксис:

<метка> EQU <EXPR> [;<Комментарий>]

<EXPR> - выражение MPALC.

17

Описание. Величина выражения присваивается метке. Величина, определяемая директивой EQU, не может быть переопределена. (Если величина метки должна быть изменена, следует использовать директиву SET).

Пример:

FOUR EQU 4 ; Метке FOUR присваивается числовая величина 4

SET - определяет переменную Ассемблера

Синтаксис:

<метка> SET <EXPR> [;<Комментарий>]

<EXPR> - выражение MPALC.

Описание. Директива SET функционально эквивалентна директиве EQU, за исключением того, что в директиве SET значение может быть переопределено.

ORG - устанавливает начальный адрес программы

Синтаксис:

[<метка>] ORG <EXPR> [;<Комментарий>]

<EXPR> - выражение MPALC.

Описание. Устанавливает начальный адрес программы, равный результату вычисления выражения. Если есть метка, то она получит величину <EXPR>. По умолчанию начальный адрес программы нулевой.

Пример:

List P = 16C56

Sub1 ORG 0x200

........................................

........................................

<Текст подпрограммы>

.........................................

retlw 0

Источник: https://studfile.net/preview/16566417/