![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
|
Список принятых сокращений, используемых при описании системы команд, приведён в таблице 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; Прочитано: 359 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!
