- •Введение
- •Устройство и принцип работы микропроцессорного контроллера
- •Основные понятия и определения
- •Форматы данных
- •Команда
- •Код операции
- •Способы указания адреса
- •Система команд
- •3.1. Обозначения в описаниях команд
- •3.2. Команды перемещения данных
- •Команды арифметических операций
- •Команды логических операций
- •Команды операций над битами
- •Команды передачи управления
- •Работа над заданием
- •Как работать с учебным микроконтроллером ук52–эм02
- •Общие требования и рекомендации к выполнению практики и оформлению отчета
Команды передачи управления
Группа представлена командами безусловного и условного переходов, командами вызова подпрограмм и командами возврата из подпрограмм (табл.23).
Таблица 8.
Название команды |
Мнемокод |
КОП |
Т |
Б |
Ц |
Операция |
Длинный переход в полном объеме ПП |
LJMP ad16 |
02 |
12 |
3 |
2 |
(PC) ad16 |
Абсолютный переход внутри страницы в 2 Кб |
AJMP ad11 |
A10a9a8 00001 |
6 |
2 |
2 |
(PC) (PC) + 2, (PC0-10) ad11 |
Короткий относительный переход внутри страницы в 256 байт |
SJMP rel |
80 |
5 |
2 |
2 |
(PC) (PC) + 2, (PC) (PC) +rel |
Косвенный относительный переход |
JMP @A+DPTR |
73 |
1 |
1 |
2 |
(PC) (A) + (DPTR) |
Переход, если аккумулятор равен нулю |
JZ rel |
60 |
5 |
2 |
2 |
(PC)(PC)+2, если (A)=0, то (PC)(PC)+rel |
Переход, если аккумулятор не равен нулю |
JNZ rel |
70 |
5 |
2 |
2 |
(PC)(PC)+2, если (A)≠0, то (PC)(PC)+rel |
Переход, если перенос равен единице |
JC rel |
40 |
5 |
2 |
2 |
(PC)(PC)+2, если (С)=1, то (PC)(PC)+rel |
Переход, если перенос равен нулю |
JNC rel |
50 |
5 |
2 |
2 |
(PC)(PC)+2, если (С)=0, то (PC)(PC)+rel |
Переход, если бит равен единице |
JB bit, rel |
20 |
11 |
3 |
2 |
(PC)(PC)+3, если (b)=l, то (PC)(PC)+rel |
Переход, если бит равен Нулю |
JNB bit, rel |
30 |
11 |
3 |
2 |
(PC)(PC)+3, если (b)=0, то (PC)(PC)+rel |
Переход, если бит установлен, с последующим сбросом бита |
JBC bit, rel |
10 |
11 |
3 |
2 |
(PC) (PC) + 3, если (b)=1, то (b) 0 и (PC) (PC) + rel |
Декремент регистра и переход, если не нуль |
DJNZ Rn, rel |
D8 – DF |
5 |
2 |
2 |
(PC) (PC) + 2, (Rn) (Rn) - 1, если (Rn) ≠ 0, то (PC) (PC) + rel |
Декремент прямо-адресуемого байта и переход, если не нуль |
DJNZ ad, rel |
D5 |
8 |
3 |
2 |
(PC) (PC) + 2, (ad) (ad) - 1, если (ad) ≠ 0, то (PC) (PC) + rel |
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно |
CJNE A, ad, rel |
B5 |
8 |
3 |
2 |
(PC) (PC) + 3,если (A) ≠ (ad), то (PC) (PC) + rel, если (A) < (ad), то (C) 1, иначе (C) 0 |
Сравнение аккумулятора с константой и переход, если не равно |
CJNE A, #d, rel |
B4 |
10 |
3 |
2 |
(PC) (PC) + 3,если (A) ≠ #d, то (PC) (PC) + rel, если (A) < #d, то (C) 1, иначе (С) 0 |
Сравнение регистра с константой и переход, если не равно |
CJNE Rn, #d, rel |
B8 – BF |
10 |
3 |
2 |
(PC) (PC) + 3,если (Rn) ≠ #d, то (PC) (PC) + rel, если (Rn) < #d, то (C) 1, иначе (С) 0 |
Сравнение байта в РПД с константой и переход, если не равно |
CJNE @Ri,#d,rel |
B6 – B7 |
10 |
3 |
2 |
(PC) (PC) + 3,если ((Ri)) ≠ #d, то (PC) (PC) + rel, если ((Ri)) < #d, то (C) 1, иначе (C) 0 |
Длинный вызов подпрограммы |
LCALL adl6 |
12 |
12 |
3 |
2 |
(PC) (PC) + 3, (SP) (SP) +1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC) ad16 |
Абсолютный вызов подпрограммы в пределах страницы в 2 Кб |
ACALL ad11 |
A10a9a8 10001 |
6 |
2 |
2 |
(PC) (PC) + 2, (SP) (SP) + 1, ((SP)) (PC0…7), (SP) (SP) + 1, ((SP)) (PC8…15), (PC0-10) ad11 |
Возврат из подпрограммы |
RET |
22 |
1 |
1 |
2 |
(PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1 |
Возврат из подпрограммы обработки прерывания |
RETI |
32 |
1 |
1 |
2 |
(PC8…15) ((SP)), (SP) (SP) - 1, (PC0…7) ((SP)), (SP) (SP) – 1 |
Пустая операция |
NOP |
0 |
1 |
1 |
1 |
(PC) (PC) + 1 |
Команды безусловного перехода:
LJMP ad16 (Long Jump - длинный переход) – длинный абсолютный переход по всему адресному пространству ПП. В трехбайтовой команде содержится полный 16-битный адрес перехода (ad16), позволяющий обращаться к любой ячейке памяти в пределах 64К. На практике редко возникает необходимость перехода в пределах всего адресного пространства и чаще используются укороченные команды перехода, занимающие меньше места в памяти.
AJMP ad11 (Absolute Jump – абсолютный переход) – абсолютный переход в пределах одной страницы памяти программ размером 2048 байт. Такие команды содержат только 11 младших бит адреса перехода (ad11). Команды абсолютного перехода имеют формат 2 байта, при этом второй байт команды содержит 8 младших разрядов адреса (А7-А0), которые адресуют 256 байт памяти, а 3 старших разряда (А10-А8) находятся в первом байте вместе с кодом операции. Для изменения адреса перехода необходимо выбирать команду с другим кодом операции. Всего имеется 8 команд типа AJMP. При выполнении команды в вычисленном адресе следующей по порядку команды ((РС)= (PC) + 2) 11 младших бит заменяются на ad11 из тела команды абсолютного перехода.
SJMP rel (Short Jump – короткий переход) - относительный переход позволяет передать управление в пределах -128 ÷ +127 байт относительно адреса следующей команды (команды, следующей по порядку за командой относительного перехода). Формирование адреса относительного перехода (rel) осуществляется путем сложения базового адреса с адресом в поле операнда команды. В качестве базового адреса используется содержимое программного счетчика, а адрес в поле операнда команды представляет собой восьмиразрядное смещение rel (relative - относительный). Число rel интерпретируется командой как целое со знаком, представленное в дополнительном коде. Диапазон его представления -128 ÷ +127. При определении числа rel следует учесть, что программный счетчик указывает на следующую, подлежащую выполнению, команду. Относительный переход широко используется в командах передачи управления, так как по сравнению с абсолютными переходами они придают программе важное качество перемещаемости.
JMP @A + DPTR – косвенный переход по адресу, представляющим собой сумму содержимого аккумулятора A и регистра DPTR. Эта команда удобна тем, что предоставляет возможность организации перехода по адресу, вычисляемому самой программой и неизвестному при написании исходного текста программы. При этом в регистре DPTR находится постоянная часть адреса, в аккумуляторе – вычисляемая.
Команды условного перехода имеют структуру Jump(условие) bit, rel или Jumр(условие), rel и позволяют осуществлять переход при выполнении следующих условий (переход если):
JZ — аккумулятор содержит нулевое значение;
JNZ — аккумулятор содержит не нулевое значение
JC — бит переноса С установлен;
JNC — бит переноса С не установлен;
JB — прямоадресуемый бит равен 1
JNB — прямоадресуемый бит равен 0;
JBC — прямоадресуемый бит равен 1 и сбрасывается в нулевое значение при выполнении команды.
Все команды условного перехода содержат короткий относительный адрес, т. е. переход может осуществляться в пределах -128... +127 байт относительно следующей команды, аналогично команде SJMP.
Команды вызова подпрограмм и возврата из них:
LCALL ad16 – длинный вызов подпрограммы в пределах полного адресного пространства 64К. Трехбайтовая команда аналогичная команде LJMP.
ACALL ad11 – двухбайтовая команда вызова подпрограммы в пределах адресного пространства 2К. Как и для команды AJMP, имеется 8 команд типа ACALL.
RET – безадресная команда возврата из подпрограммы.
RETI - безадресная команда возврата из подпрограммы обработки прерывания.
Все команды данной группы, за исключением CJNE и JBC, не оказывают воздействия на флаги. Команда CJNE устанавливает флаг C, если первый операнд оказывается меньше второго. Команда JBC сбрасывает флаг C в случае перехода.