Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000123.doc
Скачиваний:
21
Добавлен:
30.04.2022
Размер:
453.12 Кб
Скачать

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. Директивы Ассемблера

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

Директивы Ассемблера MPALC разделяются на четыре класса:

  • Директивы данных – управляют распределением памяти и обеспечивают возможности ссылок на элементы данных с использованием символических имен.

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

  • Директивы управления – оперируют секциями условно собранного кода.

  • Макро-директивы – управляют выполнением и распределением данных в пределах тела макрокоманды.

Ниже приводятся синтаксис и описание директив Ассемблера версии MPALC.

DATA - создание числовых и текстовых данных.

Синтаксис:

[<метка>] data <операнд>, [<операнд>]

data “ТЕКСТОВАЯ СТРОКА”

Описание. Директива data инициализирует одно или более слов в форме констант, меток или выражения. Данные могут также состоять из ASCII-символьных строк, включенных в кавычки (апострофы). Каждый операнд может быть выражение или строкой, вплоть до 70 символов. Ассемблер выделяет одну ячейку памяти для каждого выражения или каждого символа в строке.

Примеры:

DATA Reloc_Label + .10 : Константа

DATA 1,2 : Константы

DATA “Text” : Текстовая строка

DATA Char + ‘O’ : Символьное выражение

(Смотрите также директиву res).

1 6

IF, ELSE, ENDIF - сочетание директив, используемое для образования условной альтернативной сборки. IF – начинает условную сборку.