Раздел 18
Обзор системы команд микроконтроллеров семейства MAXQ
Мнемоника |
Описание |
16- битное слово команды |
Зависимые биты состояния |
Авт. увеличение/ уменьшение |
Замечания |
Логические операции |
AND src |
Acc <-- Acc AND src |
f001 1010 ssss ssss |
S, Z |
Y |
1 |
OR src |
Acc <-- Acc OR src |
f010 1010 ssss ssss |
S, Z |
Y |
1 |
XOR src |
Acc <-- Acc XOR src |
f011 1010 ssss ssss |
S, Z |
Y |
1 |
CPL |
Acc <-- ~Acc |
1000 1010 0001 1010 |
S, Z |
Y |
|
NEG |
Acc <-- ~Acc + 1 |
1000 1010 1001 1010 |
S, Z |
Y |
|
SLA |
Сдвиг Acc влево арифметически |
1000 1010 0010 1010 |
C, S, Z |
Y |
|
SLA2 |
Сдвиг Acc влево арифметически дважды |
1000 1010 0011 1010 |
C, S, Z |
Y |
|
SLA4 |
Сдвиг Acc влево арифметически четырехкратный |
1000 1010 0110 1010 |
C, S, Z |
Y |
|
RL |
Циклический сдвиг Acc влево (минуя бит переноса C) |
1000 1010 0100 1010 |
S |
Y |
|
RLC |
Циклический сдвиг Acc влево (через бит переноса C) |
1000 1010 0101 1010 |
C, S, Z |
Y |
|
SRA |
Сдвиг Acc вправо арифметически |
1000 1010 1111 1010 |
C, Z |
Y |
|
SRA2 |
Сдвиг Acc вправо арифметически дважды |
1000 1010 1110 1010 |
C, Z |
Y |
|
SRA4 |
Сдвиг Acc вправо арифметически четырехкратный |
1000 1010 1011 1010 |
C, Z |
Y |
|
SR |
Сдвиг Acc вправо (0 --> msbit) |
1000 1010 1010 1010 |
C, S, Z |
Y |
|
RR |
Циклический сдвиг Acc вправо (через бит переноса C) |
1000 1010 1100 1010 |
S |
Y |
|
RRC |
Циклический сдвиг Acc вправо (через бит переноса C) |
1000 1010 1101 1010 |
C, S, Z |
Y |
|
Ком |
MOVE C, Acc.<b> |
C <-- Acc.<b> |
1110 1010 bbbb 1010 |
C |
|
|
MOVE C, #0 |
C <-- 0 |
1101 1010 0000 1010 |
C |
|
|
MOVE C, #1 |
C <-- 1 |
1101 1010 0001 1010 |
C |
|
|
CPL C |
C <-- ~C |
1101 1010 0010 1010 |
C |
|
|
MOVE Acc.<b>, C |
Acc.<b> <-- C |
1111 1010 bbbb 1010 |
S, Z |
|
|
AND Acc.<b> |
C <-- C AND Acc.<b> |
1001 1010 bbbb 1010 |
C |
|
|
OR Acc.<b> |
C <-- C OR Acc.<b> |
1010 1010 bbbb 1010 |
C |
|
|
XOR Acc.<b> |
C <-- C XOR Acc.<b> |
1011 1010 bbbb 1010 |
C |
|
|
MOVE dst.<b>, #1 |
dst.<b> <-- 1 |
1ddd dddd 1bbb 0111 |
C, S, E, Z |
|
2 |
MOVE dst.<b>, #0 |
dst.<b> <-- 0 |
1ddd dddd 0bbb 0111 |
C, S, E, Z |
|
2 |
MOVE C, src.<b> |
C <-- src.<b> |
fbbb 0111 ssss ssss |
C |
|
|
Математические |
ADD src |
Acc <-- Acc + src |
f100 1010 ssss ssss |
C, S, Z, OV |
Y |
1 |
ADDC src |
Acc <-- Acc + (src + C) |
f110 1010 ssss ssss |
C, S, Z, OV |
Y |
1 |
SUB src |
Acc <-- Acc - src |
f101 1010 ssss ssss |
C, S, Z, OV |
Y |
1 |
SUBB src |
Acc <-- Acc - (src + C) |
f111 1010 ssss ssss |
C, S, Z, OV |
Y |
1 |
Команды ветвления |
{L/S} JUMP src |
IP <-- IP + src или src |
f000 1100 ssss ssss |
|
|
6 |
{L/S}JUMP C, src |
Если C=1, тогда IP <-- (IP + src) или src |
f010 1100 ssss ssss |
|
|
6 |
{L/S}JUMP NC, src |
Если C=0, тогда IP <-- (IP + src) или src |
f110 1100 ssss ssss |
|
|
6 |
{L/S}JUMP Z, src |
Если Z=1, тогда IP <-- (IP + src) или src |
f001 1100 ssss ssss |
|
|
6 |
{L/S}JUMP NZ, src |
Если Z=0, тогда IP <-- (IP + src) или src |
f101 1100 ssss ssss |
|
|
6 |
{L/S}JUMP E, src |
Если E=1, тогда IP <-- (IP + src) или src |
0011 1100 ssss ssss |
|
|
6 |
{L/S}JUMP NE, src |
Если E=0, тогда IP <-- (IP + src) или src |
0111 1100 ssss ssss |
|
|
6 |
{L/S}JUMP S, src |
Если S=1, тогда IP <-- (IP + src) или src |
f100 1100 ssss ssss |
|
|
6 |
{L/S}DJNZ LC[n], src |
Если --LC[n] <> 0, тогда IP<-- (IP + src) или src |
f10n 1101 ssss ssss |
|
|
6 |
{L/S}CALL src |
@++SP < IP+1; IP <-- (IP+src) или src |
f011 1101 ssss ssss |
|
|
6, 7 |
RET |
IP <-- @SP-- |
1000 1100 0000 1101 |
|
|
|
RET C |
Если C=1, тогда IP <-- @SP-- |
1010 1100 0000 1101 |
|
|
|
RET NC |
Если C=0, тогда IP <-- @SP-- |
1110 1100 0000 1101 |
|
|
|
RET Z |
Если Z=1, тогда IP <-- @SP-- |
1001 1100 0000 1101 |
|
|
|
RET NZ |
Если Z=0, тогда IP <-- @SP-- |
1101 1100 0000 1101 |
|
|
|
RET S |
Если S=1, тогда IP <-- @SP-- |
1100 1100 0000 1101 |
|
|
|
RETI |
IP <-- @SP-- ; INS< 0 |
1000 1100 1000 1101 |
|
|
|
RETI C |
Если C=1, тогда IP <-- @SP-- ; INS< 0 |
1010 1100 1000 1101 |
|
|
|
RETI NC |
Если C=0, тогда IP <-- @SP-- ; INS< 0 |
1110 1100 1000 1101 |
|
|
|
RETI Z |
Если Z=1, тогда IP <-- @SP-- ; INS< 0 |
1001 1100 1000 1101 |
|
|
|
RETI NZ |
Если Z=0, тогда IP <-- @SP-- ; INS< 0 |
1101 1100 1000 1101 |
|
|
|
RETI S |
Если S=1, тогда IP <-- @SP-- ; INS< 0 |
1100 1100 1000 1101 |
|
|
|
Пересылка данных |
XCH (только для микроконтроллеров серии MAXQ20) |
Перестановка байтов Acc |
1000 1010 1000 1010 |
S |
Y |
|
XCHN |
Перестановка полубайтов в каждом байте Acc |
1000 1010 0111 1010 |
S |
Y |
|
MOVE dst, src |
dst <-- src |
fddd dddd ssss ssss |
C, S, Z, E |
8 |
7, 8 |
PUSH src |
@++SP <-- src |
f000 1101 ssss ssss |
|
|
7 |
POP dst |
dst <-- @SP-- |
1ddd dddd 0000 1101 |
C, S, Z, E |
|
7 |
POPI dst |
dst <-- @SP-- ; INS < 0 |
1ddd dddd 1000 1101 |
C, S, Z, E |
|
7 |
CMP src |
E <-- (Acc = src) |
f111 1000 ssss ssss |
E |
|
|
NOP |
Пустая операция |
1101 1010 0011 1010 |
|
|
|
Примечание 1: Активный аккумулятор (Acc) не может быть источником (src) в операциях, для которых не определен явный получатель.
Примечание 2: Только модуль 8 и модули 0-5 (когда они имеются у данного конкретного микроконтроллера) поддерживаются этими одно-цикловыми командами. Если в качестве получателя указан регистр PSF, то затрагиваются биты C или E. Если в качестве получателя выступают регистры АР или АРС, то затрагиваются биты S и/или Z.
Примечание 3: Термины Acc и А[АР] могут использоваться взаимозаменяемо, чтобы обозначить активный аккумулятор.
Примечание 4: Любой индекс, представленный <b> или внутри [] рассматривается как обязательная переменная.
Примечание 5: Активный аккумулятор (Acc) не может выступать в качестве получателя, если А[АР] определен как источник.
Примечание 6: Префикс ' {L/S} ' является дополнительным.
Примечание 7: Команды, которые пытаются одновременно помещать/извлекать данные из стека (например., PUSH @SP--, PUSH @SPI--, POP @++SP, POPI @++SP) или изменяют SP противоречивым способом (например, MOVE SP, @SP--) недопустимы.
Примечание 8: Частные случаи: Если команда 'MOVE APC, Acc' устанавливает бит APC.CLR, то АР будет очищен, отменяя любую, определенную для АР, операцию автоматического увеличения/уменьшения/модулярности. Если команда 'MOVE AP, Acc' вызывает автоматическое увеличение/уменьшение/модулярность АР, то это отменяет указанную передачу данных (то есть, Acc не будет передан АР).
|