Содержание
Лист
1. Общие сведения
1.1. Назначение языка ассемблера асм51
1.2. Характеристики ОМЭВМ-51
1.3. Характеристики средств языка ассемблера
1.4. Характеристики ассемблера
1.5. Способ описания языка ассемблера
2. Элементы языка
2.1. Алфавит языка
2.2. Идентификаторы
2.3. Ключевые слова
2.4. Встроенные имена
2.5. Определяемые имена
2.6. Числа
2.7. Дополнительные возможности при записи
идентификаторов и чисел
2.8. Литерные строки
2.9. Комментарии
2.10.Указатель счетчика адреса
3. Выражения языка
3.1. Элементы выражений
3.2. Tермы в выражениях
3.3. Операторы выражения
3.4. Арифметические операторы
3.5. Операторы сдвига
3.6. Логические операторы
3.7. Операторы отношения
3.8. Операторы выделения байтов
3.9. Правила формирования и вычисления выражений
3.10. Типы выражений
4. Предложения языка
5. Директивы языка
5.1. Общая характеристика директив
5.2. Директива определения названия программного
модуля NAME
5.3. Директива определения имен перемещаемых
сегментов SEGMENT
5.4. Директива определения перемещаемых
сегментов RSEG
5.5. Директивы определения абсолютных сегментов
CSEG, XSEG, DSEG, ISEG и BSEG
5.6. Директива управления счетчиком адреса ORG
5.7. Директивы определения данных в пространстве
памяти программ
5.7.1. Директива DB
5.7.2. Директива DW
5.8. Директивы резервирования памяти
5.8.1. Директива DS
5.8.2. Директива DBIT
5.9. Директивы определения имен-синонимов EQU и SET
Директивы определения имен внутренних адресов
CODE, XDATA, DATA, IDATA и BIT
Директивы определения имен связи программных
модулей
5.11.1. Директива PUBLIC.
5.11.2. Директива EXTRN
5.12. Директива USING
5.13. Директива END
6. Инструкции языка
Приложение 2.1. Регистры специальных функций ОМЭВМ-51
Приложение 2.2. Триггеры специальных функций ОМЭВМ-51
Приложение 2.3. Зарезервированные адреса пространства памяти
программ ОМЭВМ-51
Приложение 2.4. Описание машинных команд
1. Общие сведения.
1.1. Назначение языка ассемблера асм51
Язык ассемблера асм51 предназначен для использования в системах программирования однокристальных микро-ЭВМ серии Н1830ВЕ31, совместимых по структуре и системе команд с однокристальной микро-ЭВМ КР1816ВЕ51 (ОМЭВМ серии КР1816).
По форме представления средства данного языка ассемблера соответствуют аналогичным средствам языка ассемблера контроллеров и микро-ЭВМ, построенных на основе микропроцессора типа КР580ИК80 ост11 305.910-82 и языка ассемблера асм48 ост 11 0301-86.
1.2. Характеристики ОМЭВМ-51
ОМЭВМ-51 предназначена для построения контроллеров и микро-ЭВМ различного назначения, отличающихся низкими аппаратными затратами при сохранении универсальности и быстродействия. Область применения ОМЭВМ-51 - от локальных систем автоматики до устройств управления бытовыми приборами.
Основными программно-доступными устройствами ОМЭВМ-51
являются:
8-разрядный аккумулятор А;
8-разрядный вспомогательный регистр В;
триггеры признаков результата: C (переноса), AC (вспомогательного переноса), OV (переполнения), P (четности);
триггеры выбора банка рабочих регистров RS0 и RS1;
триггер программно-управляемого флага F0;
16-разрядный счетчик команд PC;
16-разрядный регистр указателя данных DPTR;
8-разрядный регистр указателя стека SP;
внутренняя память программ емкостью 4 кБайт, расширяемая внешними устройствами до 64 кБайт;
внутренняя память данных емкостью 128 байт, в которой размещается от одного до четырех банков рабочих регистров R0-R7, область стека и побитово адресуемая область памяти;
внешняя память данных емкостью до 64 кБайт;
два программируемых 16-разрядных таймера-счетчика;
программируемый двунаправленный последовательный порт ввода-вывода и соответствующие устройства управления;
четыре 8-разрядных двунаправленных параллельных портаввода-вывода;
двухуровневая приоритетная система прерываний.
В ОМЭВМ-51 имеются следующие адресные пространства:
1) пространство адресов регистров специальных функций, таких как аккумулятор А, вспомогательный регистр В, старший (DPH) и младший (DPL) регистры указателя данных DPTR, фиксаторы портов ввода-вывода P0-P3, регистр слова состояния программы PSW, регистр указателя стека SP и др. Набор регистров специальных функций и соответствующих им адресов изменяется в зависимости от конкретного типа ОМЭВМ серии КР1816. Диапазон адресов регистров специальных функций находится в пределах от 128 до 255. При записи данных по адресу регистра несуществующей специальной функции данные теряются, при считывании из регистра несуществующей специальной функции данные не определенны;
2) пространство адресов триггеров специальных функций, таких как триггер признака переноса C, триггер признака вспомогательного переноса AC, триггер признака переполнения OV, триггер признака четности P, триггеры выбора банков рабочих регистров RS0, RS1 и другие. Все триггеры специальных функций физически размещаются в регистрах специальных функций. Наличие триггеров специальных функций определяется типом ОМЭВМ. Диапазон адресов триггеров специальных функций находится в пределах от 128 до 255. Части адресов соответствуют несуществующие триггеры. При записи бита по адресу несуществующего триггера этот бит теряется, при считывании бита из несуществующего триггера его значение неопределенно;
3) пространство адресов памяти программ. Диапазон адресов этого пространства находится в пределах от 0 до 65535. Память программ с адресами от 0 до 4096 может реализоваться внутренним запоминающим устройством. Некоторые типы ОМЭВМ серии КР1816 не имеют внутреннего запоминающего устройства. В пространстве адресов памяти программ размещаются коды команд и, возможно, данные. Часть адресов пространства памяти программ зарезервирована для точек входа в программу начального запуска и программы обслуживания прерываний. Набор зарезервированных адресов зависит от типа ОМЭВМ серии КР1816. Для ОМЭВМ-51 зарезервированными являются следующие адреса: 0, 3, 11, 19, 27 и 35. Адрес команды, подлежащей выполнению, хранится в счетчике команд PC. Обращение к данным (константам) в памяти команд осуществляется по адресу равному сумме содержимого счетчика команд PC и аккумулятора A или регистра указателя данных DPTR и аккумулятора A;
4) пространство адресов внешней памяти данных. Диапазон адресов этого пространства находится в пределах от 0 до 65535. Во внешней памяти данных могут размещаться только данные, обращение к которым осуществляется посредством содержимого рабочего регистра-указателя R0, R1 или регистра указателя данных DPTR;
5) пространство прямых адресов внутренней памяти данных. Диапазон адресов этого пространства находится в пределах от 0 до 127. Обращение к данным в пространстве прямых адресов осуществляется посредством второго байта кода команды. Пространство адресов регистров специальных функций является продолжением данного пространства;
6) пространство косвенных адресов внутренней памяти данных. Диапазон адресов этого пространства находится в пределах от 0 до 127 (для некоторых типов ОМЭВМ серии КР1816 - от 0 до 255). Пространство косвенных адресов от - 0 до 127 физически совпадает с пространством прямых адресов;
7) пространство поразрядных прямых адресов внутренней памяти данных. Диапазон адресов этого пространства находится в пределах от 0 до 127. Данное пространство физически совпадает с пространством прямых адресов ячеек от 32 до 47. Пространство адресов триггеров специальных функций является продолжением пространства поразрядных прямых адресов;
8) пространство адресов стека. Диапазон адресов этого пространства находится в пределах от 0 до 127 (для некоторых типов ОМЭВМ серии КР1816 от 0 до 255). Данное пространство физически совпадает с пространством косвенных адресов. При начальном запуске ОМЭВМ-51 адрес верхушки стека в регистре указателя стека SP устанавливается равным 7. Произвольный адрес верхушки стека можно установить, например, с помощью команды:
MOV SP,#<адрес>;
9) пространство рабочих регистров, которое разделено на 4 банка. Каждый из банков содержит восемь 8-разрядных рабочих регистров R0 - R7. Диапазоны адресов пространства рабочих регистров во внутренней памяти данных следующие:
Для нулевого банка: 0 - 7;
Для первого банка: 8 - 15;
Для второго банка: 16 - 23;
Для третьего банка: 24 - 31.
Выбор текущего банка рабочих регистров определяется содержимым триггеров специальных функций RS0 и RS1:
Банк (RS1) (RS0)
Нулевой 0 0
Первый 0 1
Второй 1 0
Третий 1 1
Установить триггеры в требуемое состояние можно, например, посредством команд CLR RS0, CLR RS1, SETB RS0 и SETB RS1. Рабочие регистры R0 и R1 текущего банка могут использоваться при косвенной адресации внутренней и внешней памяти данных. Адресам памяти текущего банка рабочих регистров R0-R7 в языке ассемблера присвоены символические имена AR0-AR7 соответственно.
1.3. Характеристики средств языка ассемблера
Средства языка ассемблера асм51 обеспечивают модульный способ построения программы. Программный модуль, записанный на языке ассемблера, называется исходным модулем. Результат трансляции исходного модуля - обьектный модуль.
Исходная программа представляет собой последовательность предложений языка,сгруппированных в сегменты и оформленных в виде файла. Сегменты исходного модуля содержат описание машинных команд, данных, адресов и служат для генерации абсолютных или перемещаемых сегментов обьектного модуля.
В зависимости от устройства памяти и способа адресации данных в этой памяти сегменты исходного модуля делятся на 4 типа:
CODE, который используется для определения команд, данных и адресов в пространстве памяти команд;
XDATA, который используется для определения адресов в пространстве внешней памяти данных;
DATA, который используется для определения прямых адресов в пространстве внутренней памяти данных;
IDATA, который используется для определения косвенных адресов в пространстве внутренней памяти данных;
BIT, который используется для определения прямых побитовых адресов в пространстве внутренней памяти данных.
При описании перемещаемого сегмента ему присваивается имя и тип, а также определяется способ его обьединения с одноименными сегментами, описанными в других исходных модулях. Абсолютным сегментам присваивается только тип. Они не могут быть обьединены с другими сегментами.
В языке ассемблера имеются средства для организации символических ссылок между различными программными модулями (т.е. средства определения общих и внешних символических имен).
Программа в общем случае строится из набора абсолютных и (или) перемещаемых обьектных модулей и представляет собой абсолютный обьектный модуль.
1.4. Характеристики ассемблера
Преобразование исходного модуля в обьектный осуществляется ассемблером за два просмотра. В процессе первого просмотра выделяются все символические имена, определенные пользователем, а также распределяются адреса в соответствующих пространствах памяти. В процессе второго просмотра генерируется обьектный модуль и формируется листинг, содержащий обьектный код, соответствующий текст исходной программы и сообщения об ошибках (в случае их обнаружения).
На этапе трансляции для каждого сегмента исходного модуля создается свой счетчик адреса. В любой момент трансляции доступен только один счетчик адреса, называемый текущим.
1.5. Способ описания языка ассемблера
Терминальные элементы конструкций языка представляются в таком виде, в каком они должны быть записаны в тексте исходной программы, например:
ADD, A, DB, AND, $, :, #, @.
Нетерминальные элементы конструкций языка представляются идентификаторами, заключенными в угловые скобки, например:
<адр> , <выр>.
Необязательные элементы конструкций языка заключаются в квадратные скобки, например:
[<выр>].
Альтернативный выбор одного из двух элементов конструкции языка обозначается обратной дробной чертой, например:
<выр> | <стр>.
Повторение предыдущей конструкции языка обозначается тремя точками, например:
<выр> | <стр> [, ...].
Числовые значения представляются шестнадцатеричными числами следующего вида:
<ц> ... Н
где <ц> - шестнадцатеричная цифра 0-9, A-F.
Алгоритмы, описывающие действия в языке, имеют следующий вид:
Нач
<серия>
Кон
где <серия> - последовательность команд присваивания,
ветвления, повторения и цикла.
Команда присваивания имеет следующую форму записи:
<перем> := <выр>
где <перем> - идентификатор обьекта языка;
<выр> - выражение.
По данной команде идентификатору обьекта языка <перем> присваивается значение выражения <выр>. При записи выражений используются идентификаторы определенных в языке обьектов и знаки операций сложения (+), вычитания (-), умножения (*), деления (/), вычисления остатка от деления (мод), возведения в степень (**), логичеслого сложения (или), логического умножения (и) и отрицания (не).
Команда ветвления имеет одну из следующих двух форм записи:
1) если <условие>
То <серия1>
Иначе <серия2>
Все
2) если <условие>
То <серия1>
Все
где <условие> - утверждение, которое может соблюдаться (принимать значение "да") или не соблюдаться (принимать значение "нет").
По команде ветвления первой формы записи, если утверждение <условие> соблюдается, то выполняется последовательность команд <серия1>, в противном случае - последовательность команд <серия2>.
По команде ветвления второй формы записи, если утверждение <условие> соблюдается, то выполняется последовательность команд <серия1>, в противном случае выполняется команда, следующая за командой ветвления.
В качестве утверждения <условие> используются выражения <выр> и знаки операций отношения меньше ( < ), не меньше ( >= ), больше( > ), не больше( <= ), равно( = ), не равно( <> ).
Команда выбора имеет следующую форму записи:
Выбор
При <условие1>: <серия1>
. . .
При <условиеN>: <серияN>
Иначе <серия>
Все
По данной команде выполняется одна из последовательностей команд <серия1>,..., <серияN>, для которой совлюдается соответствующее утверждение <условие1>,...,<условиеN>. Если соответствующее утверждение не соблюдается, то выполняется последовательность команд <серия>.
Команда цикла имеет следующую форму записи:
Для <счетчик> от <выр1> до <выр2>
Нц
<серия>
Кц
По данной команде:
1) переменной <счетчик> присваивается значение выражения <выр1>;
2) если значение переменой <счетчик> не равно значению выражения <выр2>, то выполняется последовательность команд <серия>, в противном случае выполняется шаг 4;
3) значение переменной <счетчик> увеличивается (уменьшается) на единицу и выполняется шаг 2;
4) завершается выполнение команды цикла.
Алгоритм описания действий в языке может содержать комментарий следующего вида:
(* <комментарий> *)