Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эрни Каспер Программирование на языке Ассемблер...doc
Скачиваний:
120
Добавлен:
09.11.2019
Размер:
954.88 Кб
Скачать

1.2.Правила записи команд микроконтроллера семейства i8051 на Ассемблере

В стародавние времена для начала работы по программированию после описания архитектуры достаточно было привести подробную информацию о машинных кодах команд. Тогда программы записывались только на машинном языке. Такой способ разработки программ называет­ся программированием в кодах (в жаргоне американских программистов по-прежнему используется термин "coding"). Запись восьмеричных или шестнадцатеричных кодов производилась на бланках, разбитых верти­кальными линиями на колонки (графы). Каждая команда записывалась в одной строке. Первая графа была предназначена для адреса команды или числа. При записи команды во второй графе помещался код опера­ции, а в следующих графах — адреса или значения операндов. Запись числа производилась в соответствии с его форматом. В бланке также отводилась графа для комментариев.

Ныне программирование в кодах вытеснено программированием на языках. Для программирования микроконтроллеров семейства i8051 можно использовать языки Ассемблер и усеченные Си и Паскаль. Инте­ресно отметить, что даже проект новомодного языка Java начинался применительно к микроконтроллерам. Алгоритмические языки програм­мирования имеют явные преимущества перед программированием в кодах благодаря применению символических имен. При выборе языка для программирования микроконтроллеров следует учесть ограничения на языки высокого уровня, накладываемые малым объемом ОЗУ, а в некоторых случаях и ПЗУ. В отличие от Ассемблера, для которого ис­пользуется трансляция команд, записанных в символическом виде, языки высокого уровня используют компиляцию более сложных операторов, вместо которых подставляются стандартные заготовки из нескольких (иногда десятков) команд. Полученная таким образом программа далеко не оптимальна по быстродействию и требуемому объему памяти. После­дующая за компиляцией оптимизация программы не позволяет достичь такой экономии ресурсов, какая получается при программировании на Ассемблере.

Алфавит Ассемблера состоит из прописных и строчных латинских букв, из цифр, знаков препинания и некоторых других символов, которые перечислены ниже в порядке возрастания их ASCII кода:

!#"$%&>()*•+,-./

0123456789:

;<=>?

@ABCDEFGHIJKLMNO

PQRSTUVWXYZ

[ \ ] ^ _ '

abcdefghijklmno

pqrstuvwxyz{ | } ~

Кроме того, транслятор воспринимает символы, не имеющие отображения (пробел, табуляцию и пару символов - возврат каретки и перевод строки), но изменяющих положение следующих за ними символов текста. Транс­лятор производит грамматический разбор текста построчно. Каждая строка (аналог предложения) делится на лексемы (аналоги слов). В Ассемб­лере имеются лексемы 5 видов: специальные символы, имена (идентифи­каторы), числовые литералы, строковые литералы и комментарии. Специ­альные символы служат для обозначения операций в выражениях и в качестве разделителей других лексем.

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

поле_метки поле_мнемокода поле_операндов ; поле комментариев

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

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

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