Всего в системе команд семейства MCS-51 можно выделить 5 групп.
Арифметические команды. Обеспечивают выполнение операций сложения и вычитания (в том числе с учетом переноса) над целочисленными 8-разрядными операндами, инкремент и декремент регистров и ячеек внутренней памяти данных, двоично-десятичную коррекцию содержимого аккумулятора. Особенностью системы команд MCS-51 является наличие в составе этой группы команд умножения и деления 8-разрядных целочисленных операндов. Получающийся 16-разрядный результат хранится в регистрах А и В. Результатом выполнения арифметических команд является, кроме нового содержимого аккумулятора, измененное значение регистра PSW.
Логические команды. Выполняют операции AND, OR, «исключающее ИЛИ», сдвиги содержимого аккумулятора вправо и влево, очистку аккумулятора и перестановку его тетрад.
В качестве операндов могут использоваться непосредственные данные и содержимое ячеек внутренней памяти данных. Выполнение некоторых логических команд влияет на значение флага С (перенос) регистра PSW.
Команды пересылки данных. Осуществляют передачу данных между ячейками внутренней памяти данных (команды MOV), внешней памяти данных (команды MOVX) и аккумулятором. Существуют две команды MOVC, позволяющие читать в аккумулятор содержимое памяти программ. К этой группе относятся парные команды PUSH и POP, осуществляющие загрузку и выгрузку содержимого прямо адресуемой ячейки в стек (из стека). Имеются четыре команды взаимного обмена информацией между ячейками внутренней памяти данных (ХСН и XCHD). Команды пересылки данных значения флагов в регистре PSW не изменяют.
Команды работы с битами. Эти команды устанавливают в «1» (SETB) или «0» (CLR) прямо адресуемый бит внутренней памяти данных, изменяют его значение на противоположное (CPL), выполняют операции AND и OR над флагом переноса С и прямо адресуемым битом (ANL и ORL), осуществляют пересылку значения между флагом С и прямо адресуемым битом (MOV), осуществляют передачу управления по состоянию флага С или прямо адресуемого бита (JC, JNC, JB, JNB, JBC); Команды этой группы, выполняющие логические операции и осуществляющие пересылку значения бита, изменяют значение флага С регистра PSW. Остальные команды на флаги не действуют.
Команды передачи управления. Передача управления может осуществляться безусловно или по условию, без возврата или с возвратом. В последнем случае для возврата необходимо хранить состояние процессора. Система команд MCS-51 кроме обычных «длинных» переходов с использованием 16-разрядного адреса унаследовала от семейства MCS-48 команды передачи управления с «коротким» 11-разрядным адресом. Группа команд передачи управления включает четыре команды безусловного перехода без возврата («ультракороткая» SJMP, «короткая» AJMP, «длинная» LJMP и переход по значению A+DPTR в команде JMP), две команды безусловного перехода с возвратом («короткая» ACALL и «длинная» LCALL), восемь команд условного перехода без возврата. Имеются две команды возврата: из обычной подпрограммы команда RET и из подпрограммы обработки прерывания команда RETI. Завершает эту группу и всю систему команд NOP - «нет операции». Команды передачи управления значения флагов в регистре PSW не изменяют, кроме команд условного перехода CJNE, влияющих на значение флага С.
При описании системы команд далее используются следующие обозначения:
Rn один из регистров R0..R7 в банке регистров, определенном битами регистра PSW;
direct адрес ячейки внутренней памяти данных.
@Ri ячейка внутренней памяти данных, косвенно адресуемая через регистры R0 или R1 текущего банка;
#data 8-разрядная константа, включенная в команду;
#data 16 16-разрядная константа, включенная в команду;
addr 16 16-разрядный адрес перехода в командах LCALL и LJMP;
addr 11 11-разрядный адрес перехода в командах ACALL и AJMP;
rel 8-разрядная константа со знаком (в дополнительном коде). Определяет величину смещения в команде SJMP и всех командах условных переходов;
bit адрес бита во внутренней памяти данных. Команды следующим образом изменяют значение флагов регистра PSW:
Instruction | Flag | Instruction | Flag |
С OV АС | С OV AC | ||
ADD | X X X | CLRC | |
ADD | X X X | CPLC | X |
SUBB | X X X | ANL C.bit | X |
MUL | 0 X | ANL C./bit | X |
DIV | 0 X | ORL C.bit | X |
DA | X | ORL C,/bit | X |
RRC | X | MOV C.bit | X |
RLC | X | CJNE | X |
SETB C |
Таблица команд микроконтроллеров семейства MCS-51 приведена в Приложении А.