Встроенные имена присвоены адресам регистров специальных функций, адресам флагов специальных функций AR0—AR7, рабочим регистрам R0—R7 текущего банка регистров, а также аккумулятору
Определяемые имена
Определяемые имена объявляются пользователем. В языке программирования ASM-51 имеются следующие категории определяемых идентификаторов:
— метки;
— внутренние и внешние переменные адресного типа;
— внутренние и внешние переменные числового типа;
— имена сегментов;
— названия программных модулей.
Числа и литеральные строки
В языке программирования ASM-51 используются целые беззнаковые числа, представленные в двоичной, восьмеричной, десятичной и шестнадцатеричной формах записи. Для определения основания системы счисления используется суффикс (буква, следующая за числом):
— В определяет двоичное число (разрешенные цифры 0, 1);
— Q\O определяет восьмеричное число (разрешенные цифры 0, 1, 2, 3, 4, 5, 6, 7);
— D определяет десятичное число (разрешенные цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
— Н определяет шестнадцатеричное число (разрешенные цифры 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F).
Для десятичного числа суффикс может отсутствовать. Количество символов в числе ограничено размером строки, однако значение числа определяется по модулю 216 (т. е. диапазон значений числа находится в пределах от 0 до 65535).
Примеры записи чисел:
011101b, 1011100B, 735Q, 45бо, 256, 0fah, 0CBH.
Число всегда начинается с цифры. Это необходимо для того, чтобы отличать шестнадцатеричное число от идентификатора. Например:
— ADCH — идентификатор;
— ADCH — число.
Часто бывает удобно выполнить некоторые вычисления для того, чтобы получить число. При этом, если поместить в текст программы предварительно вычисленное на калькуляторе значение, то может возникнуть вопрос: откуда взялось это значение. Лучше ввести формулу расчета и сами значения непосредственно в исходный текст программы. Язык программирования ASM-51 позволяет выполнять беззнаковые операции над числами. В таких выражениях допустимо использовать следующие арифметические операции:
+ суммирование;
— вычитание;
* умножение;
/ деление;
mod вычисление остатка от целочисленного деления.
В языке программирования ASM-51 также определена одноместная операция изменения знака — «минус» (-). Для нее требуется только один операнд — тот, которому она предшествует.
Часто требуется выполнять операции в определенном порядке, отличающемся от принятого по умолчанию. Для изменения порядка выполнения операций можно воспользоваться скобками. Более того, использование скобок в ряде случаев повышает наглядность программы и, тем самым, уменьшает время ее отладки.
Кроме арифметических операций в выражениях допустимо использование следующих логических операций:
— not побитовая инверсия операнда;
— and логическое «И»;
— or логическое «ИЛИ»;
— хоr «исключающее ИЛИ» (суммирование по модулю два);
— функции выделения старшего «HIGH» и младшего «LOW» байта 16-разрядного числа.
Пример использования выражений языка программирования ASM-51 для определения числовой константы приведен в листинге 8.3.
Часто операнд используется для представления символов на экране дисплея. В этом случае для определения его значения удобнее воспользоваться не числом, а литеральной константой.
Литеральная константа заключается в апострофы:
'a', 'W'
mov SBUF, #'Б' ;Передать по последовательному порту ANSI код буквы 'Б'
Часто на экране дисплея приходится отображать не одну букву, а целые фразы. Их удобно запоминать в памяти программ, а затем передавать на дисплей при помощи специальной подпрограммы. Для записи фраз в памяти программ можно воспользоваться литеральными строками, для ввода которых в память программ удобно воспользоваться директивой db:
Nadp: DB 'Ошибка в блоке 5'
В этом случае каждый символ строки заменяется отдельным байтом и запоминается в ПЗУ памяти программ. Начало строки обязательно помечается при помощи метки. Для увеличения наглядности программы следует содержание надписи отобразить в имени использованной метки.
Любой ассемблер всегда включает в себя команды микроконтроллера, но ими не ограничивается набор операторов этого языка программирования. Дело в том, что нужно уметь управлять самим процессом трансляции программы.
Первое, чем приходится по необходимости заниматься, если в программе используются только команды микроконтроллера, — это вручную распределять память данных микроконтроллера. При таком распределении приходится помнить, какой вид данных находится в каждой конкретной ячейке памяти, и указывать значение адреса памяти в качестве операнда команд. При необходимости изменить местоположение данных в ячейках памяти приходится просматривать всю программу и изменять соответствующие команды.