Раздел 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 не будет передан АР).
|