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

 

2.7.1. Все микроконтроллеры семейства MCS-51 имеют единую систему команд, общее количество которых равно 111.

2.7.2. Команды имеют различные форматы: 1 байт (49 команд), 2 байта (46 команд), 3 байта (16 команд). Первый байт команды любого формата содержит код операции, второй и третий байты – адреса операндов или непосредственные операнды.

2.7.3. Данные (операнды и результаты выполнения операций) могут иметь следующие форматы: бит, 4-битное слово, байт, 16-битное слово.

2.7.4. Команды могут выполняться в течение 1-го машинного цикла (64 команды), 2-х машинных циклов (45 команд) или 4 машинных циклов (2 команды). Машинный цикл имеет фиксированную длительность, равную 12-ти периодам тактового генератора (см. подраздел 2.9).

2.7.5. Команды могут быть объединены в следующие группы:

1) команды передачи данных,

2) команды операций с аккумулятором,

3) команды операций с битами,

4) команды передачи управления,

5) команды арифметических операций,

6) команды логических операций.

2.7.6. Мнемонические обозначения всех команд МК семейства MCS-51 на языке ассемблера приведены в табл. 2.4, где:

addr – прямой адрес байта (число или символическое имя),

bit – прямой адрес бита (число или символическое имя),

data – значение константы (число),

rel – 8-битный относительный адрес (метка),

addr11 – 11-битный абсолютный адрес (метка),

addr16 – 16-битный абсолютный адрес (метка),

A – аккумулятор,

PC – программный счетчик,

(A), (addr), (Rn)– содержимое аккумулятора, ячейки памяти, регистра.

Таблица 2.4

СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРОВ СЕМЕЙСТВА MCS-51

Мнемокод Наименование команды Операция
КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ
MOV A,Rn Пересылка в аккумулятор из регистра (n = 0 ¸ 7) (A) (Rn)
MOV A,addr Пересылка в аккумулятор прямоадресуемого байта (A) (addr)
MOV A,@Ri Пересылка в аккумулятор косвенноадресуемого байта (i = 0, 1) (A) ((Ri))
MOV A,#data Пересылка в аккумулятор константы (A) data
MOV Rn,A Пересылка в регистр из аккумулятора (i = 0 ¸ 7) (Rn) (A)
MOV Rn,addr Пересылка в регистр прямоадресуемого байта (i = 0 ¸ 7) (Rn) (addr)
MOV Rn,#data Пересылка в регистр константы (i = 0 ¸ 7) (Rn) data
MOV addr,A Пересылка аккумулятора по прямому адресу (addr) (A)
MOV addr,Rn Пересылка регистра по прямому адресу (i = 0 ¸ 7) (addr) (Rn)
MOV addrD,addrS Пересылка прямоадресуемого байта по прямому адресу (addrD) (addrS)
MOV addr,@Ri Пересылка косвенноадресуемого байта по прямому адресу (i = 0, 1) (addr) ((Ri))
MOV addr,#data Пересылка константы по прямому адресу (addr) data
MOV @Ri,A Пересылка аккумулятора по косвенному адресу (i = 0, 1) ((Ri)) (A)
MOV @Ri,addr Пересылка прямоадресуемого байта по косвенному адресу (i = 0, 1) ((Ri)) (addr)
MOV @Ri,#data Пересылка константы по косвенному адресу (i = 0, 1) ((Ri)) data
MOV DPTR,#data16 Загрузка указателя данных (DPTR) data16
MOVC A,@A+DPTR Пересылка косвенноадресуемого байта из памяти программ в аккумулятор (A) ((A)+(DPTR))
MOVC A,@A+PC Пересылка косвенноадресуемого байта из памяти программ в аккумулятор (PC) (PC)+1 (A) ((A)+(PC))

 

Таблица 2.4 (продолжение)

 

Мнемокод Наименование команды Операция
MOVX A,@Ri Пересылка косвенноадресуемого байта из внешней памяти данных в аккумулятор (8-бит. адрес, i = 0, 1) (A) ((Ri))
MOVX A,@DPTR Пересылка косвенноадресуемого байта из внешней памяти данных в аккумулятор (16-бит. адрес) (A) ((DPTR))
MOVX @Ri,A Пересылка аккумулятора во внешнюю память данных по косвенному адресу (8-бит. адрес, i = 0, 1) ((Ri)) (A)
MOVX @DPTR,A Пересылка аккумулятора во внешнюю память данных по косвенному адресу (16-бит. адрес) ((DPTR) (A)
PUSH addr Загрузка в стек (SP) (SP)+1 ((SP)) (addr)
POP addr Извлечение из стека (addr) ((SP)) (SP) (SP)-1
XCH A,Rn Обмен аккумулятора с регистром (i = 0 ¸ 7) (A) « (Rn)
XCH A,addr Обмен аккумулятора с прямоадресуемым байтом (A) « (addr)
XCH A,@Ri Обмен аккумулятора с косвенноадресуемым байтом (i = 0, 1) (A) « ((Ri))
XCHD A,@Ri Обмен младшей тетрады аккумулятора с младшей тетрадой косвенноадресуемого байта (i = 0, 1) (A0-3) « ((Ri)0-3)
КОМАНДЫ ОПЕРАЦИЙ С АККУМУЛЯТОРОМ
CLR A Очистка аккумулятора (A) 0
CPL A Инверсия аккумулятора (A) not (A)
INC A Инкремент аккумулятора (A) (A)+1
DEC A Декремент аккумулятора (A) (A) -1
RL A Циклический сдвиг аккумулятора влево (An+1) (An), n=0¸6 (A0) (A7)
RLC A Сдвиг аккумулятора влево через перенос (An+1) (An), n=0¸6 (A0) (C) (C) (A7)
RR A Циклический сдвиг аккумулятора вправо (An) (An+1), n=0¸6 (A7) (A0)

 

 

Таблица 2.4 (продолжение)

Мнемокод Наименование команды Операция
RRC A Сдвиг аккумулятора вправо через перенос (An) (An+1), n=0¸6 (A7) (C) (C) (A0)
SWAP A Перестановка тетрад в аккумуляторе (A0-3) « (A4-7)
DA A Десятичная коррекция аккумулятора Если (AC)=1 или А0-3 >9, то (A0-3) (A0-3)+6, затем, если (C)=1 или А4-7 >9, то (A4-7) (A4-7)+6
MUL AB Умножение аккумулятора на регистр В (B)(A) (A) × (B)
DIV AB Деление аккумулятора на регистр В (A).(B) (A) / (B)
КОМАНДЫ ОПЕРАЦИЙ С БИТАМИ
CLR C Сброс переноса (C) 0
CLR bit Сброс бита (bit) 0
SETB C Установка переноса (C) 1
SETB bit Установка бита (bit) 1
CPL C Инверсия переноса (C) not (C)
CPL bit Инверсия бита (bit) not (bit)
ANL C,bit Логическое И переноса и бита (C) (C) & (bit)
ANL C,/bit Логическое И переноса с инверсией бита (C) (C) & not(bit)
ORL C,bit Логическое ИЛИ переноса и бита (C) (C) V (bit)
ORL C,/bit Логическое ИЛИ переноса с инверсией бита (C) (C) V not(bit)
MOV C,bit Пересылка бита в перенос (C) (bit)
MOV bit,C Пересылка переноса в бит (bit) (C)
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ
LJMP addr16 Длинный переход в полном адресном пространстве памяти программ (PC) addr16
AJMP addr11 Абсолютный переход в пределах страницы размером 2К байт (PC) (PC)+2 (PC0-10) addr11
SJMP rel Относительный переход внутри страницы размером 256 байт (PC) (PC)+2 (PC) (PC)+rel
JMP @A+DPTR Косвенный относительный переход (PC) (A)+(DPTR)

Таблица 2.4 (продолжение)

 

Мнемокод Наименование команды Операция
JNB bit,rel Переход, если бит не установлен (PC) (PC)+3, если (bit)=0, то (PC) (PC)+rel
JBC bit,rel Переход, если бит установлен, с последующим сбросом бита (PC) (PC)+3, если (bit)=1, то (bit) 0 и (PC) (PC)+rel
DJNZ Rn,rel Декремент регистра и переход, если содержимое не равно нулю (PC) (PC)+2, (Rn) (Rn) -1, если (Rn)¹0, то (PC) (PC)+rel
DJNZ addr,rel Декремент прямо адресуемого байта и переход, если содержимое не равно нулю (PC) (PC)+2, (addr) (addr) -1, если (addr) ¹ 0, то (PC) (PC)+rel
CJNE A,addr,rel Переход, если аккумулятор не равен прямоадресуемому байту (PC) (PC)+3, если (A) ¹ (addr), то (PC) (PC)+rel, если (A) < (addr), то (C) 1, иначе (C) 0
CJNE A,#data,rel Переход, если аккумулятор не равен константе (PC) (PC)+3, если (A) ¹ data, то (PC) (PC)+rel, если (A) < (addr), то (C) 1, иначе (C) 0
CJNE Rn,#data,rel Переход, если регистр не равен константе (PC) (PC)+3, если (Rn) ¹ data, то (PC) (PC)+rel, если (Rn) < (data), то (C) 1, иначе (C) 0
CJNE @Ri,#data,rel Переход, если косвенноадресуемый байт не равен константе (i = 0, 1) (PC) (PC)+3, если ((Ri)) ¹ data, то (PC) (PC)+rel, если ((Ri)) < (data), то (C) 1, иначе (C) 0

 

Таблица 2.4 (продолжение)

 

Мнемокод Наименование команды Операция
JZ rel Переход, если аккумулятор равен нулю (PC) (PC)+2, если (A)=0, то (PC) (PC)+rel
JNZ rel Переход, если аккумулятор не равен нулю (PC) (PC)+2, если (A)¹0, то (PC) (PC)+rel
JC rel Переход, если бит переноса установлен (PC) (PC)+2, если (С)=1, то (PC) (PC)+rel
JNC rel Переход, если бит переноса не установлен (PC) (PC)+2, если (С)=0, то (PC) (PC)+rel
JB bit,rel Переход, если бит установлен (PC) (PC)+3, если (bit)=1, то (PC) (PC)+rel
LCALL addr16 Длинный вызов подпрограммы (PC) (PC)+3, (SP) (SP) + 1, ((SP)) (PC0-7), (SP) (SP) + 1, ((SP)) (PC8-15), (PC) addr16
ACALL addr11 Абсолютный вызов подпрограммы в пределах страницы размером 2К байт (PC) (PC)+3, (SP) (SP) + 1, ((SP)) (PC0-7), (SP) (SP) + 1, ((SP)) (PC8-15), (PC0-10) addr11
RET Возврат из подпрограммы (PC8-15) ((SP)), (SP) (SP) - 1 (PC0-7) ((SP)), (SP) (SP) - 1
RETI Возврат из подпрограммы обработки прерывания (PC8-15) ((SP)), (SP) (SP) - 1 (PC0-7) ((SP)), (SP) (SP) - 1,
NOP Холостая операция (PC) (PC)+1

 

Таблица 2.4 (продолжение)

 

Мнемокод Наименование команды Операция
КОМАНДЫ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ
ADD A,Rn Сложение аккумулятора с регистром (n= 0 ¸ 7) (A) (A)+(Rn)
ADD A,addr Сложение аккумулятора с прямоадресуемым байтом (A) (A)+(addr)
ADD A,@Ri Сложение аккумулятора с косвенноадресуемым байтом (i = 0, 1) (A) (A)+((Ri))
ADD A,#data Сложение аккумулятора с константой (A) (A)+data
ADDC A,Rn Сложение аккумулятора с регистром и переносом (A) (A)+(Rn)+(C)
ADDC A,addr Сложение аккумулятора с прямоадресуемым байтом и переносом (A) (A)+ + (addr)+(C)
ADDC A,@Ri Сложение аккумулятора с косвенно-адресуемым байтом и переносом (i = 0, 1) (A) (A)+((Ri))+(C)
ADDC A,#data Сложение аккумулятора с константой и переносом (A) (A)+data+(C)
SUBB A,Rn Вычитание из аккумулятора регистра и заема (i = 0 ¸ 7) (A) (A)-(Rn)-(C)
SUBB A,addr Вычитание из аккумулятора прямоадресуемого байта и заема (A) (A)-(addr)-(C)
SUBB A,@Ri Вычитание из аккумулятора косвенноадресуемого байта и заема (i = 0, 1) (A) (A)-((Ri))-(C)
SUBB A,#data Вычитание из аккумулятора константы и заема (A) (A)-data-(C)
INC A Инкремент аккумулятора (A) (A)+1
INC Rn Инкремент регистра (i = 0 ¸ 7) (Rn) (Rn)+1
INC addr Инкремент прямоадресуемого байта (addr) (addr)+1
INC @Ri Инкремент косвенноадресуемого байта (i = 0, 1) ((Ri)) ((Ri))+1
INC DPTR Инкремент указателя данных (DPTR) (DPTR)+1
DEC A Декремент аккумулятора (A) (A) -1
DEC Rn Декремент регистра (i = 0 ¸ 7) (Rn) (Rn) -1

Таблица 2.4 (продолжение)

 

Мнемокод Наименование команды Операция
DEC addr Декремент прямоадресуемого байта (addr) (addr) -1
DEC @Ri Декремент косвенноадресуемого байта (i = 0, 1) ((Ri)) ((Ri)) -1
MUL AB Умножение аккумулятора на регистр В (B)(A) (A) × (B)
DIV AB Деление аккумулятора на регистр В (A).(B) (A) / (B)
DA A Десятичная коррекция аккумулятора Если (AC)=1 или А0-3 >9, то (A0-3) (A0-3)+6, затем, если (C)=1 или А4-7 >9, то (A4-7) (A4-7)+6
КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ
ANL A,Rn Логическое И аккумулятора и регистра (i = 0 ¸ 7) (A) (A) & (Rn)
ANL A,addr Логическое И аккумулятора и прямоадресуемого байта (A) (A) & (addr)
ANL A,@Ri Логическое И аккумулятора и косвенноадресуемого байта (i = 0, 1) (A) (A) & ((Ri))
ANL A,#data Логическое И аккумулятора и константы (A) (A) & data
ANL addr,A Логическое И прямоадресуемого байта и аккумулятора (addr) (addr) & A
ANL addr,#data Логическое И прямоадресуемого байта и константы (addr) (addr) & & data
ORL A,Rn Логическое ИЛИ аккумулятора регистра (i = 0 ¸ 7) (A) (A) V (Rn)
ORL A,addr Логическое ИЛИ аккумулятора и прямоадресуемого байта (A) (A) V (addr)
ORL A,@Ri Логическое ИЛИ аккумулятора и косвенноадресуемого байта (i = 0, 1) (A) (A) V ((Ri))
ORL A,#data Логическое ИЛИ аккумулятора и константы (A) (A) V data
ORL addr,A Логическое ИЛИ прямоадресуемого байта и аккумулятора (A) (addr) V (A)
ORL addr,#data Логическое ИЛИ прямоадресуемого байта и константы (A) (addr) V data

Таблица 2.4 (окончание)

 

Мнемокод Наименование команды Операция
XRL A,Rn Исключающее ИЛИ аккумулятора регистра (i = 0 ¸ 7) (A) (A) Å (Rn)
XRL A,addr Исключающее ИЛИ аккумулятора и прямоадресуемого байта (A) (A) Å (addr)
XRL A,@Ri Исключающее ИЛИ аккумулятора и косвенноадресуемого байта (i = 0, 1) (A) (A) Å ((Ri))
XRL A,#data Исключающее ИЛИ аккумулятора и константы (A) (A) Å data
XRL addr,A Исключающее ИЛИ прямоадресуемого байта и аккумулятора- (A) (addr) Å (A)
XRL addr,#data Исключающее ИЛИ прямоадресуемого байта и константы (A) (addr) Å data

2.7.7. Перечень команд, при выполнении которых изменяются флаги слова состояния программы, приведен в табл. 2.5.

Машинные коды всех операций, форматы команд (количество байтов) и времена их выполнения (количество циклов) приведены в прил. 1.

Таблица 2.5