Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Список принятых сокращений, используемых при описании системы команд, приведён в таблице 2.1.
Таблица 2.1 – Принятые сокращения
Сокращение | Описание сокращения |
Rn | Регистры R0–R7 активного банка регистров |
direct | Восьмибитный адрес внутренней памяти данных (ОЗУ). Это может быть адрес ячейки памяти или адрес регистра специального назначения |
@Ri | Восьмибитные данные из внутренней памяти данных, адресуемые косвенно через регистры R0 и R1 |
#data | Восьмибитная константа |
#data 16 | Шестнадцатибитная константа |
addr 16 | Шестнадцатиразрядный адрес. Используется в командах LCALL и LJMP, что позволяет делать ветвления в пределах 64 кБ адресуемого адресного пространства памяти программ |
addr 11 | Одиннадцатиразрядный адрес. Используется командами ACALL и AJMP, что позволяет выполнять ветвления в пределах 2 кБ страниц памяти |
Rel | Байт восьмибитного смещения со знаком. Используется командами SJMP и всеми командами условных переходов, что позволяет делать переходы в пределах от минус 128 до плюс 127 байт |
Bit | Непосредственно адресуемый бит во внутренней памяти данных или в регистрах специального назначения |
В системе команд микроконтроллера можно выделить следующие группы:
– группа арифметических команд, к ней относятся команды сложения, вычитания, умножения и деления (таблица 2.2);
– группа логических команд, в которую входят команды логического И, ИЛИ, ИСКЛЮЧАЮЩЕГО ИЛИ, инверсии, обмена и ротации (таблица 2.3);
– группа команд пересылки (таблица 2.4);
– группа команд манипуляции с битами, в которую входят команды изменения битов и проверки их состояния (таблица 2.5);
– группа команд ветвления, которая включает в себя команды условных и безусловных переходов, команды вызова подпрограмм и возврата из них, а также команды организации циклов (таблица 2.6).
Таблица 2.7 содержит список инструкций, воздействующих на флаги состояния микроконтроллера.
Таблица 2.2 – Арифметические команды
Мнемоника | Описание | Длина, байт | Число периодов генератора | |
ADD | A, Rn | Прибавляет регистр к Аккумулятору | ||
ADD | A, direct | Прибавляет содержимое ячейки внутренней памяти данных, адрес которой задан в команде, к Аккумулятору | ||
ADD | A, @Ri | Прибавляет содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1, к Аккумулятору | ||
ADD | A, #data | Прибавляет к Аккумулятору число #data | ||
ADDC | A, Rn | Прибавляет регистр и флаг переноса к Аккумулятору | ||
ADDC | A, direct | Прибавляет содержимое ячейки внутренней памяти данных, адрес которой задан в команде, и флаг переноса к Аккумулятору | ||
ADDC | A, @Ri | Прибавляет содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1, и флаг переноса к Аккумулятору | ||
ADDC | A, #data | Прибавляет к Аккумулятору число #data и флаг переноса | ||
SUBB | A, Rn | Вычитает регистр из Аккумулятора |
Продолжение таблицы 2.2
SUBB | A, direct | Вычитает содержимое ячейки внутренней памяти данных, адрес которой задан в команде, из Аккумулятора | ||
SUBB | A, @Ri | Вычитает содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1, из Аккумулятора | ||
SUBB | A, #data | Вычитает число #data из Аккумулятора | ||
INC | A | Инкрементирует Аккумулятор | ||
INC | Rn | Инкрементирует регистр | ||
INC | direct | Инкрементирует содержимое ячейки внутренней памяти данных, адрес которой задан в команде | ||
INC | @Ri | Инкрементирует содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
DEC | A | Декрементирует Аккумулятор | ||
DEC | Rn | Декрементирует регистр | ||
DEC | direct | Декрементирует содержимое ячейки внутренней памяти данных, адрес которой задан в команде | ||
DEC | @Ri | Декрементирует содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
INC | DPTR | Инкрементирует регистровую пару DPTR | ||
MUL | AB | Перемножает Аккумулятор и регистр В | ||
DIV | AB | Делит Аккумулятор на регистр В | ||
DA | A | Выполняет десятичную коррекцию Аккумулятора |
Таблица 2.3 – Логические команды
Мнемоника | Описание | Длина, байт | Число периодов генератора | |
ANL | A, Rn | Выполняет логическое И Аккумулятора и регистра | ||
ANL | A, direct | Выполняет логическое И Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в команде | ||
ANL | A, @Ri | Выполняет логическое И Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
ANL | A, #data | Выполняет логическое И Аккумулятора и числа #data | ||
ANL | direct, A | Выполняет логическое И содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и Аккумулятора. Результат в ячейке памяти | ||
ANL | direct, #data | Выполняет логическое И содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и числа #data. Результат в ячейке памяти | ||
ORL | A, Rn | Выполняет логическое ИЛИ Аккумулятора и регистра | ||
ORL | A, direct | Выполняет логическое ИЛИ Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в команде | ||
ORL | A, @Ri | Выполняет логическое ИЛИ Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 |
Продолжение таблицы 2.3
ORL | A, #data | Выполняет логическое ИЛИ Аккумулятора и числа #data | ||
ORL | direct, A | Выполняет логическое ИЛИ содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и Аккумулятора. Результат в ячейке памяти | ||
ORL | direct, #data | Выполняет логическое ИЛИ содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и числа #data. Результат в ячейке памяти | ||
XRL | A, Rn | Выполняет логическое ИСКЛЮЧА-ЮЩЕЕ ИЛИ Аккумулятора и регистра | ||
XRL | A, direct | Выполняет логическое ИСКЛЮЧА-ЮЩЕЕ ИЛИ Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в команде | ||
XRL | A, @Ri | Выполняет логическое ИСКЛЮЧА-ЮЩЕЕ ИЛИ Аккумулятора и содержимого ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
XRL | A, #data | Выполняет логическое ИСКЛЮЧА-ЮЩЕЕ ИЛИ Аккумулятора и числа #data | ||
XRL | direct, A | Выполняет логическое ИСКЛЮЧА-ЮЩЕЕ ИЛИ содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и Аккумулятора. Результат в ячейке памяти | ||
XRL | direct, #data | Выполняет логическое ИСКЛЮЧАЮЩЕЕ ИЛИ содержимого ячейки внутренней памяти данных, адрес которой задан в команде, и числа #data. Результат в ячейке памяти |
Продолжение таблицы 2.3
CLR | A | Обнуляет Аккумулятор | ||
CPL | A | Комплементирует Аккумулятор | ||
RL | A | Ротирует Аккумулятор влево | ||
RLC | A | Ротирует Аккумулятор влево с использованием флага переноса | ||
RR | A | Ротирует Аккумулятор вправо | ||
RRC | A | Ротирует Аккумулятор вправо с использованием флага переноса | ||
SWAP | A | Обменивает полубайты в Аккумуляторе |
Таблица 2.4 – Команды пересылки
Мнемоника | Описание | Длина, байт | Число периодов генератора | |
MOV | A, Rn | Пересылает регистр в Аккумулятор | ||
MOV | A, direct | Пересылает содержимое ячейки внутренней памяти данных, адрес которой задан в команде, в Аккумулятор | ||
MOV | A, @Ri | Пересылает содержимое ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1, в Аккумулятор | ||
MOV | A, #data | Пересылает данные #data в Аккумулятор | ||
MOV | Rn, A | Пересылает Аккумулятор в регистр |
Продолжение таблицы 2.4
MOV | Rn, direct | Пересылает содержимое ячейки внутренней памяти данных, адрес которой задан в команде, в регистр | ||
MOV | Rn, #data | Пересылает данные #data в регистр | ||
MOV | direct, A | Пересылает Аккумулятор в ячейку внутренней памяти данных, адрес которой задан в команде | ||
MOV | direct, Rn | Пересылает регистр в ячейку внутренней памяти данных, адрес которой задан в команде | ||
MOV | direct1, direct2 | Пересылает ячейку внутренней памяти данных, адрес которой задан в команде (direct2), в ячейку внутренней памяти данных, адрес которой задан в команде (direct1) | ||
MOV | direct, @Ri | Пересылает ячейку внутренней памяти данных, адрес которой задан в регистре R0 или R1, в ячейку внутренней памяти данных, адрес которой задан в команде | ||
MOV | direct, #data | Пересылает данные #data в ячейку внутренней памяти данных, адрес которой задан в команде | ||
MOV | @Ri, A | Пересылает Аккумулятор в ячейку внутренней памяти данных, адрес которой задан в регистре R0 или R1 |
Продолжение таблицы 2.4
MOV | @Ri, direct | Пересылает ячейку внутренней памяти данных, адрес которой задан в команде, в ячейку внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
MOV | @Ri, #data | Пересылает данные #data в ячейку внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
MOV | DPTR, #data 16 | Загружает регистровую пару DPTR числом #data 16 | ||
MOVC | A, @A+DPTR | Загружает Аккумулятор содержимым ячейки памяти программ, адрес которой вычисляется как сумма содержимого регистровой пары DPTR и Аккумулятора | ||
MOVC | A, @A+PC | Загружает Аккумулятор содержимым ячейки памяти программ, адрес которой вычисляется как сумма содержимого счётчика команд PC и Аккумулятора | ||
MOVX | A, @Ri | Загружает Аккумулятор содержимым ячейки внешней памяти данных, адрес которой задан в регистре R0 или R1. Старший байт адреса задается содержимым порта Р2 | ||
MOVX | A, @DPTR | Загружает Аккумулятор содержимым ячейки внешней памяти данных, адрес которой задан в регистровой паре DPTR |
Продолжение таблицы 2.4
MOVX | @Ri, A | Загружает ячейку внешней памяти данных, адрес которой задан в регистре R0 или R1, Аккумулятором. Старший байт адреса задается содержимым порта Р2 | ||
MOVX | @DPTR, A | Загружает Аккумулятором ячейку внешней памяти данных, адрес которой задан в регистровой паре DPTR | ||
PUSH | direct | Записывает ячейку внутренней памяти данных, адрес которой задан в команде, в стек | ||
POP | direct | Считывает в ячейку внутренней памяти данных, адрес которой задан в команде, из стека | ||
XCH | A, Rn | Обменивает содержимое Аккумулятора и регистра | ||
XCH | A, direct | Обменивает содержимое Аккумулятора и ячейки внутренней памяти данных, адрес которой задан в команде | ||
XCH | A, @Ri | Обменивает содержимое Аккумулятора и ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 | ||
XCHD | A, @Ri | Обменивает содержимое четырёх младших бит Аккумулятора и четырех младших бит ячейки внутренней памяти данных, адрес которой задан в регистре R0 или R1 |
Таблица 2.5 – Команды работы с битами
Мнемоника | Описание | Длина, байт | Число периодов генератора | |
CLR | C | Сбрасывает в 0 флаг переноса | ||
CLR | Bit | Сбрасывает в 0 бит | ||
SETB | C | Устанавливает в 1 флаг переноса | ||
SETB | Bit | Устанавливает в 1 бит | ||
CPL | C | Инвертирует флаг переноса | ||
CPL | Bit | Инвертирует бит | ||
ANL | C, bit | Логическое И флага переноса и бита | ||
ANL | C, /bit | Логическое И флага переноса и инверсии бита | ||
ORL | C, bit | Логическое ИЛИ флага переноса и бита | ||
ORL | C, /bit | Логическое ИЛИ флага переноса и инверсии бита | ||
MOV | C, bit | Загрузить флаг переноса из бита | ||
MOV | bit, C | Загрузить бит из флага переноса |
Таблица 2.6 – Команды ветвления
Мнемоника | Описание | Длина, байт | Число периодов генератора | |
JC | rel | Переход, если флаг переноса равен 1 | ||
JNC | rel | Переход, если флаг переноса равен 0 | ||
JB | bit, rel | Переход, если бит равен 1 | ||
JNB | bit, rel | Переход, если бит равен 0 |
Продолжение таблицы 2.6
JBC | bit, rel | Переход, если бит равен 1, с последующим сбросом бита в 0 | ||
ACALL | addr11 | Вызов подпрограммы по абсолютному адресу | ||
LCALL | addr16 | Вызов подпрограммы по длинному абсолютному адресу | ||
RET | Возврат из подпрограммы | |||
RETI | Возврат из прерывания | |||
AJMP | addr11 | Безусловный переход по абсолютному адресу | ||
LJMP | addr16 | Безусловный переход по длинному абсолютному адресу | ||
SJMP | rel | Безусловный переход по относительному адресу | ||
JMP | @A+DPTR | Безусловный переход по адресу, равному сумме содержимого DPTR и Аккумулятора | ||
JZ | rel | Переход, если Аккумулятор равен 0 | ||
JNZ | rel | Переход, если Аккумулятор не равен 0 | ||
CJNE | A, direct, rel | Сравнивает Аккумулятор и ячейку внутренней памяти данных, адрес которой задан в команде, и переходит по относительному адресу, если они не равны | ||
CJNE | A, #data, rel | Сравнивает Аккумулятор и данные #data и переходит по относительному адресу, если они не равны |
Продолжение таблицы 2.6
CJNE | Rn, #data, rel | Сравнивает регистр и данные #data и переходит по относительному адресу, если они не равны | ||
CJNE | @Ri, #data, rel | Сравнивает ячейку внутренней памяти данных, адрес которой задан в регистре R0 или R1, и данные #data и переходит по относительному адресу, если они не равны | ||
DJNZ | Rn, rel | Декрементирует регистр и переходит по относительному адресу, если регистр после этого не равен 0 | ||
DJNZ | direct, rel | Декрементирует ячейку внутренней памяти данных, адрес которой задан в команде, и переходит по относительному адресу, если результат декремента не 0 | ||
NOP | Нет операции |
Таблица 2.7 – Инструкции, влияющие на флаги переноса (С), переполнения (OV) и полупереноса (АС)
Инструкция | Флаги | Инструкция | Флаги | ||||
C | OV | AC | C | OV | AC | ||
ADD | X | X | X | CLR C | |||
ADDC | X | X | X | CPL C | X | ||
SUBB | X | X | X | ANL C, bit | X | ||
MUL | X | ANL C, /bit | X | ||||
DIV | X | ORL C, bit | X | ||||
DA | X | ORL C, /bit | X | ||||
RRC | X | MOV C, bit | X | ||||
RLC | X | CJNE | X | ||||
SETB C | |||||||
Примечание – Символ «Х» означает влияние команды на флаг, символ «1» – установку флага, символ «0» – сброс флага |
3 Общие сведения о языке Ассемблер для микроконтроллеров стандарта MCS-51
и о программном пакете фирмы 2500 A.D.
Язык Ассемблер для микроконтроллеров стандарта MCS-51 является достаточно типичным для микроконтроллеров такого класса.
Программный пакет для программирования на языке Ассемблер микроконтроллеров стандарта MCS51 фирмы 2500 A.D. состоит из программы компилятора, программы линковщика и программы библиотекаря. Все эти программы запускаются из командной строки DOS и используют большое количество параметров. Для повышения удобства работы с пакетом применяется интегрированная среда АsmEdit, запускаемая под WINDOWS ХР.
Ниже рассматривается синтаксис языка Ассемблер и некоторые наиболее употребимые директивы.
Дата публикования: 2014-11-03; Прочитано: 309 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!