Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_МИУС_14.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.81 Mб
Скачать

2.4.3. Общая характеристика системы команд

Набор команд микроконтроллеров семейства включает 42 мнемонических обозначения, связанных с конкретными способами адресации и типами данных. Всего система команд содержит 111 базовых команд, разделенных по функциональному признаку на группы:

  • команды передачи данных;

  • команды арифметических операций;

  • команды логических операций;

  • команды ветвления и передачи управления;

  • команды битовых операций.

В таблицах Приложения 2 приведены команды микроконтроллеров семейства Intel 8051. Для каждой команды указаны: название, мнемокод, двоичный код операции, количество тактов, байтов и машинных циклов, символическое описание операции.

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

В зависимости от способа адресации и места расположения операнда можно выделить девять типов операндов, между которыми возможен информационный обмен, в том числе и без участия аккумулятора.

Группу команд арифметических операций образуют команды, выполняющие операции сложения, вычитания, умножения, деления, десятичной коррекции и инкремента/декремента байтов. Команды ADD и ADDC допускают сложение аккумулятора с большим числом операндов. Также существуют четыре команды SUBB, что позволяет производить вычитание байтов и многобайтных двоичных чисел.

Группу команд логических операций образуют команды, реализующие функционально полную систему логических операций над байтами. Это операции И, ИЛИ, НЕ, исключающее ИЛИ, циклические сдвиги и обмен тетрадами.

Отличительной особенностью команд операций с битами является то, что они оперируют с одноразрядными операндами. В качестве таких операндов могут выступать отдельные биты некоторых регистров специальных функций и портов, а также 128 программных флагов пользователя. Существуют команды сброса CLR, установки SETB и инверсии CPL битов, а также их конъюнкции и дизъюнкции.

К группе команд передачи управления относятся команды, условных и безусловных переходов, вызова и возврата из подпрограмм, а также пустая операция NOP. В большинстве команд используется прямая адресация.

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

Для организации программных циклов удобно пользоваться командой DJNZ. В качестве счётчика циклов может использоваться не только регистр, но и прямоадресуемый байт (например, ячейку резидентной памяти данных).

По разрядности указываемого адреса можно выделить три разновидности команд безусловных переходов.

Длинный переход (Long) по всему адресному пространству памяти программ – LJMP ad16.

Абсолютный переход (Absolute) в пределах одной страницы памяти программ размером 2 Кбайта АJMP ad11. Такая команда содержит только 11 младших битов адреса перехода.

Короткий относительный переход (Short) позволяет передать управление в пределах от – 128 до +127 байт относительно адреса следующей команды – SJMP rel. Относительный адрес перехода содержится во втором байте команды.

Косвенный относительный переход позволяет передавать управление по косвенному адресу JMP @А+DPTR. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы.

Обслуживание подпрограмм производится при помощи ряда специальных команд. Для вызова подпрограммы необходимо использовать команды LCALL и ACALL. Эти команды, в отличие от команд перехода LJMP и AJMP, сохраняют в стеке адрес возврата в основную программу. Для возврата из подпрограммы необходимо выполнить команду RET. Для возврата из подпрограммы обслуживания прерывания используется команда RETI, отличающаяся от команды RET тем, что разрешает прерывания обслуженного уровня.