Исходный текст программы на языке программирования ASM-51 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Исходный текст программы на языке программирования ASM-51



Исходный текст программы представляет собой последовательность операторов языка программирования ASM-51, сгруппированных в сегменты и оформленных в виде файла.

Оператор – это базовая конструкция языка программирования, определяющая действия в программе. В языке программирования ASM-51 в одной строке может быть записан только один оператор! Максимальный допустимый размер строки – 255 символов. Признаком конца оператора является символ "возврат каретки", который вводится в текст программы при нажатии на клавишу ‘Enter’ в конце строки.

Оператор языка программирования ASM-51состоит из трех полей:

<поле метки> <поле операции> <поле комментария>

Любое из полей, в том числе и все поля, могут отсутствовать. Оператор, в котором все поля отсутствуют, называется пустым оператором. Он используется для увеличения наглядности программы. Пример оператора, записанного на языке программирования ASM-51, приведен на рис. 23.3.

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

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

Рис. 23.3. Пример оператора, записанного на языке программирования ASM-51

Если в операторе присутствует только метка, то она помечает ближайший следующий оператор, в котором присутствует инструкция процессора или директива ассемблера. Использование оператора, содержащего только метку, может быть вызвано либо слишком большой длиной самой метки, либо необходимостью присвоить одному непустому оператору нескольких меток. Наиболее яркий пример использования нескольких меток — это когда одна метка используется в качестве имени подпрограммы, а другая обозначает начало цикла. Пример использования оператора, содержащего только метку, приведен в листинге 23.1.

Листинг 23.1 Пример использования оператора, содержащего только метку

PodprogrammaPeredachiDannyh:;Помечается следующий оператор

CopyNxtByte: Mov R0, A

Mov A, @R0

DJNZ R0, CopyNxtByte

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

Поле комментария начинается с символа "точка с запятой" (;) и может содержать любые ASCII- или ANSI-символы. Это поле используется для записи пояснений к программе. Оператор, в котором присутствует только поле комментария, используется для увеличения наглядности программы. Примеры записи комментариевна языке программирования ASM-51 приведены в листинге. 23.2.

Листинг 23.2. Примеры записи комментариев на языке программирования ASM-51

;------------------------------------------------------------------------

; ПОДПРОГРАММА ВЫЧИСЛЕНИЯ ФУНКЦИИ

;------------------------------------------------------------------------

; X + Y * Z

Символы языка ASM-51

Символы исходной программы представляют собой подмножество таблиц символов ASCII для DOS и ANSI для WINDOWS. В исходном тексте программы, написанном на языке программирования ASM-51, могут быть использованы следующие символы:

q символы интервала;

q буквы;

q знаки;

q цифры.

Символы интервала определяют один или несколько пробелов в предложении исходного модуля. К этим символам относятся "пробел" и " табуляция".

В качестве букв воспринимаются латинские буквы верхнего и нижнего регистра:

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.

Кроме того, в качестве букв могут быть использованы символы вопросительного знака (?) и подчеркивания (_).

Ниже приведен перечень цифр:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

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

a, b, c, d, e, f, A, B, C, D, E, F.

Наименования знаков и их обозначение приведено в табл. 23.1.

Таблица 23.1. Наименования знаков и их обозначение

Наименование Обозначение
Номер #
Знак денежной единицы $
Апостроф '
Круглая скобка левая (
Круглая скобка правая )
Звездочка *
Плюс +
Запятая ,
Минус -
Точка .
Дробная черта /
Двоеточие :
Точка с запятой ;
Меньше <
Равно =
Больше >
Вопросительный знак ?
Коммерческое эт @

Знаки, комбинации знаков(<>, >=, <=), а также символы интервала являются разделителями конструкций языка. До и после знака-разделителя в любой конструкции языка могут быть вставлены символы интервала.

ASCII- или ANSI-символы, не входящие в перечень основных символов алфавита языка, считаются дополнительными. Они могут использоваться в комментариях для пояснений в исходном тексте программы, а также для определения символьных констант.

Из символов формируются идентификаторы и числа.

Идентификаторы

Идентификатор— это символическое обозначение объекта программы. В качестве идентификатора может быть использована любая последовательность букв и цифр. При этом в качестве буквы может быть использована любая буква латинского алфавита, а также вопросительный знак (?) и знак "нижнее подчеркивание" (_). Идентификатор может начинаться только с буквы! Это позволяет отличать его от числа. В идентификаторах язык программирования ASM-51 различает буквы верхнего и нижнего регистров.

Количество символов в идентификаторе ограничено только длиной строки (255 символов), но при этом транслятор языка программирования ASM‑51 различает идентификаторы по первым 31 символам.

Примеры записи идентификаторов:

ADD5, FFFFH,?, ALFA_1.

 

В языке программирования ASM-51 имеются три категории идентификаторов:

83. Ключевые слова.

84. Встроенные имена.

85. Определяемые имена.

Ключевые слова

Ключевое словоявляется определяющей частью оператора языка программирования. Значения ключевых слов языка АSM‑51 не могут быть изменены или переопределены в программном модуле каким-либо образом. Ключевому слову не может быть назначено имя-синоним. Ключевые слова могут быть написаны буквами как верхнего, так и нижнего регистров. То есть ключевое слово MOV и ключевое слово mov полностью эквивалентны.

В языке программирования АSM‑51 имеются следующие категории ключевых слов:

q инструкции;

q директивы;

q вспомогательные слова;

q операции.

Инструкции по форме записи совпадают с мнемоническими обозначениями команд микроконтроллеров семейства MCS-51 и совместно с операндами составляют команды микроконтроллера. Список инструкций:

ACALL, ADD, ADDC, AJMP, ANL, CALL, CJNE, CLR, CPL, DA, DEC, DIV, DJNZ, INC, JB, JBC, JC, JMP, JNB, JNC, JNZ, JZ, LCALL, LJMP, MOV, MOVC, MOVX, MUL, NOP, ORL, POP, PUSH, RET, RETI, RL, RLC, RR, RRC, SETB, SJMP, SUBB, SWAP, XCH, XCHD, XRL.

Директивы совместно с вспомогательными словами определяют действия, которые должны быть выполнены ассемблером в процессе преобразования исходного текста программы в объектный код. В языке программирования ASM-51 используются:

Директивы:

BIT, BSEG, CODE, CSEG, DATA, DB, DBIT, DS, DSEG, DW, END, EQU, EXTRN, IDATA, ISEG, NAME, ORG, PUBLIC, RSEG, SEGMENT, SET, USING, XDATA, XSEG.

Вспомогательные слова:

AT, BIT, BITADDRESSABLE, CODE, DATA, IDATA, INBLOCK, INPAGE, NUMBER, PAGE, UNIT, XDATA.

Операции выполняются ассемблером в процессе вычисления выражений на этапе трансляции исходного текста программы для определения конкретного числа, которое используется в команде. Перечень операций, использующихся языком программирования ASM-51:

AND, EQ, GE, GT, HIGH, LE, LOW, LT, MOD, NE, NOT, OR, SHL, SHR, XOR.

Встроенные имена

Встроенные именаприсвоены адресам регистров специальных функций, адресам флагов специальных функций AR0-AR7, рабочим регистрам R0-R7 текущего банка регистров, а также аккумулятору A и флагу переноса C. Список встроенных имен приведен в табл. 23.2.

Таблица 23.2. Встроенные имена

Имя Регистр
A Аккумулятор
R0-R7 8-разрядный рабочий регистр текущего банка рабочих регистров
AR0-AR7 Адреса 8-разрядных рабочих регистров текущего банка рабочих регистров
DPTR 16-разрядный регистр-указатель данных
PC 16-разрядный счетчик команд
C Флаг переноса
AB Регистровая пара, состоящая из аккумулятора A (старшая часть) и регистра B (младшая часть)

Определяемые имена

Определяемые именаобъявляются пользователем. В языке программирования ASM‑51 имеются следующие категории определяемых идентификаторов:

q метки;

q внутренние и внешние переменные адресного типа;

q внутренние и внешние переменные числового типа;

q имена сегментов;

q названия программных модулей.

Числа и литеральные строки

В языке программирования ASM-51 используются целые беззнаковые числа, представленные в двоичной, восьмеричной, десятичной и шестнадцатеричной формах записи. Для определения основания системы счисления используется суффикс (буква, следующая за числом):

q B определяет двоичное число(разрешенные цифры 0,1);

q Q\O определяет восьмеричное число(разрешенные цифры 0,1,2,3,4,5,6,7);

q D определяет десятичное число(разрешенные цифры 0,1,2,3,4,5,6,7,8,9)

q H определяет шестнадцатеричное число(разрешенные цифры 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

Для десятичного числа суффикс может отсутствовать. Количество символов в числе ограничено размером строки, однако значение числа определяется по модулю 216 (т.е. диапазон значений числа находится в пределах от 0 до 65535).

Примеры записи чисел:

011101b, 1011100B, 735Q, 456o, 256, 0fah, 0CBH

Число всегда начинается с цифры. Это необходимо для того, чтобы отличать шестнадцатеричное число от идентификатора. Например:

ADCH — идентификатор;
0ADCH — число

Часто бывает удобно выполнить некоторые вычисления для того, чтобы получить число. При этом, если поместить в текст программы предварительно вычисленное на калькуляторе значение, то может возникнуть вопрос: откуда взялось это значение. Лучше ввести формулу расчета и сами значения непосредственно в исходный текст программы. Язык программирования ASM-51 позволяет выполнять беззнаковые операции над числами. В таких выражениях допустимо использовать следующие арифметические операции:

q + суммирование;

q - вычитание;

q * умножение;

q / деление;

q mod вычисление остатка от целочисленного деления.

В языке программирования ASМ-51 также определена одноместная операцияизменения знака — “минус” '–'. Для нее требуется только один операнд — тот, которому она предшествует.

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

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

q not побитовая инверсия операнда;

q and логическое "И";

q or логическое "ИЛИ";

q xor "исключающее ИЛИ" (суммирование по модулю два)

q и функций выделения старшего ‘HIGH’ и младшего ‘LOW’ байта шестнадцатиразрядного числа.

Пример использования выражений языка программирования ASM‑51 для определения числовой константы приведен в листинге 23.3.

Листинг 23.3. Пример использования выражений для определения числовой константы

Init:

;----------Настроить таймер T0------------------------------------------

mov TMOD,#00000001b

; |

; ||++-------Выбрать режим 16-разрядного таймера

; |+---------Использовать внутреннюю синхронизацию

; +----------Запретить управление таймером от ножки INT0

 

mov TH0, #HIGH(-(F_ZQ/12)*10);Выражение для определения

mov TL0, #LOW(-(F_ZQ/12)*10);константы

 

setb TR0;Включить таймер 0

Часто операнд используется для представления символов на экране дисплея. В этом случае для определения его значения удобнее воспользоваться не числом, а литеральной константой. Литеральная константа заключается в апострофы:

'a', 'W'

mov SBUF, #’Б’;Передать по последовательному порту ANSI код буквы ‘Б’

Часто на экране дисплея приходится отображать не одну букву, а целые фразы. Их удобно запоминать в памяти программ, а затем передавать на дисплей при помощи специальной подпрограммы. Для записи фраз в памяти программ можно воспользоваться литеральными строками, для ввода которых в память программ удобно воспользоваться директивой DB:

Nadp: DB ‘Ошибка в блоке 5’

В этом случае каждый символ строки заменяется отдельным байтом и запоминается в ПЗУ памяти программ. Начало строки обязательно помечается при помощи метки. Для увеличения наглядности программы следует содержание надписи отобразить в имени использованной метки.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 276; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.113.197 (0.033 с.)