Микроконтроллеры семейства MCS51 Intel
Инструкции MCS51TM Intel
Инструкции, модифицирующие флаги (1)
Инструкция |
C OV AC |
Инструкция |
C OV AC |
ADD |
X X X |
CLR C |
O |
ADDC |
X X X |
CPL C |
X |
sub>B |
X X X |
ANL C,bit |
X |
MUL |
O X |
ANL C,/bit |
X |
DIV |
O X |
ORL C,bit |
X |
DA |
X |
ORL C, bit |
X |
RRC |
X |
MOV C,bit |
X |
RLC |
X |
CJNE |
X |
SETB C |
1 |
Замечание. Операции с регистром специальных функций с регистром PSW или с его битами также модифицируют флаги.
Условные обозначения операндов:
Rn Регистр R7-R0 текущего банка рабочих регистров
direct 8-bit прямой адрес. Это может быть ячейка внутреннего ОЗУ данных (0-7F h) или SFR (7Fh - 0FFh).
@Ri 8-bit косвенный адрес внутреннего ОЗУ (00 - 0ffh) равен содержимому указателя R0 или R1.
#data 8-bit непосредственная константа, включенная в инструкцию.
#data 16 16-bit непосредственная константа, включенная в инструкцию.
addr 16 16-bit адрес длинного перехода, используемый командами LCALL и LJMP.
addr 11 11-bit адрес относительного перехода, используемый командами ACALL и AJMP.
rel 8-bit смещение со знаком, используемое командой SJMP и командами условных переходов.
bit Прямой адрес бита внутреннего ОЗУ или SFR.
Таблица 1. Список инструкций MCS51TM Intel.
Мнемоника |
Содержание |
Byte |
Tact |
1. Арифметические операции. |
|||
ADD A,Rn |
(A) + (Rn) -> A Сложение |
1 |
12 |
ADD A,direct |
(A) + (direct) -> A |
2 |
12 |
ADD A,@Ri |
(A) + ( (Ri) ) -> A |
1 |
12 |
ADD A,#data |
(A) + #data -> A |
2 |
12 |
ADDC A,Rn |
(A) + (Rn) + c -> A Сложение с учетом переноса |
1 |
12 |
ADDC A,direct |
(A) + (direct) + c -> A |
2 |
12 |
ADDC A,@Ri |
(A) + ( (Ri) ) + c -> A |
1 |
12 |
ADDC A,#data |
(A) - #data - c -> A |
2 |
12 |
sub>B A,Rn |
(A) - (Rn) - c -> A Вычитание с учетом заема |
1 |
12 |
sub>B A,direct |
(A) - (direct) - c -> A |
2 |
12 |
sub>B A,@Ri |
(A) - ( (Ri) ) - c -> A |
1 |
12 |
sub>B A,#data |
(A) - #data - c -> A |
2 |
12 |
INC A |
(A) + 1 -> A Инкремент ( увеличение на единицу ) |
1 |
12 |
INC Rn |
(Rn) + 1 -> Rn |
1 |
12 |
INC direct |
(direct) + 1 -> direct |
2 |
12 |
INC @Ri |
( (Ri) ) + 1 -> ( Ri ) |
1 |
12 |
INC DPTR |
(DPTR) + 1 -> DPTR |
1 |
24 |
DEC A |
(A) - 1 -> A Декремент ( уменьшение на единицу ) |
1 |
12 |
DEC Rn |
(Rn) - 1 -> Rn |
1 |
12 |
DEC direct |
(direct) - 1 -> direct |
2 |
12 |
DEC @Ri |
( (Ri) ) - 1 -> ( Ri ) |
1 |
12 |
MUL AB |
(A) * (B) -> AB Умножение (AB - произведение) |
1 |
48 |
DIV AB |
(A) / (B) -> AB Деление (A - частное B - остаток) |
1 |
48 |
DA A |
Десятичная коррекция аккумулятора |
1 |
12 |
2. Логические операции. |
|||
ANL A,Rn |
(A) и (Rn) -> A Логическое побитовое И |
1 |
12 |
ANL A,direct |
(A) и (direct) -> A |
2 |
12 |
ANL A,@Ri |
(A) и ( (Ri) ) -> A |
1 |
12 |
ANL A,#data |
(A) и #data -> A |
2 |
12 |
ANL direct,A |
(direct) и (A) -> direct |
2 |
12 |
ANL direct,#data |
(direct) и #data -> direct |
3 |
24 |
ORL A,Rn |
(A) или (Rn) -> A Логическое побитовое ИЛИ |
1 |
12 |
ORL A,direct |
(A) или (direct) -> A |
2 |
12 |
ORL A,@Ri |
(A) или ( (Ri) ) -> A |
1 |
12 |
ORL A,#data |
(A) или #data -> A |
2 |
12 |
ORL direct,A |
(direct) или (A) -> direct |
2 |
12 |
ORL direct,#data |
(direct) или #data -> direct |
3 |
24 |
XRL A,Rn |
(A) ^ (Rn) -> A Логическое побитовое исключающее ИЛИ |
1 |
12 |
XRL A,direct |
(A) ^ (direct) -> A |
2 |
12 |
XRL A,@Ri |
(A) ^ ( (Ri) ) -> A |
1 |
12 |
XRL A,#data |
(A) ^ #data -> A |
2 |
12 |
XRL direct,A |
(direct) ^ (A) -> direct |
2 |
12 |
XRL direct,#data |
(direct) ^ #data -> direct |
3 |
24 |
CLR A |
00h -> A Обнуление |
1 |
12 |
Мнемоника |
Содержание |
Byte |
Tact |
CPL A |
not (A) -> A Инверсия |
1 |
12 |
RL A |
Циклический сдвиг аккумулятора влево на один бит |
1 |
12 |
RLC A |
Циклический сдвиг аккумулятора влево на один бит через бит переноса |
1 |
12 |
RR A |
Циклический сдвиг аккумулятора вправо на один бит |
1 |
12 |
RRC A |
Циклический сдвиг аккумулятора вправо на один бит через бит переноса |
1 |
12 |
SWAP A |
Обмен тетрадами в аккумуляторе |
1 |
12 |
3. Пересылка данных. |
|||
MOV A,Rn |
(Rn) -> A |
1 |
12 |
MOV A,direct |
(direct) -> A |
2 |
12 |
MOV A,@Ri |
( (Ri) ) -> A |
1 |
12 |
MOV A,#data |
#data -> A |
2 |
12 |
MOV Rn,A |
(A) -> Rn |
1 |
12 |
MOV Rn,direct |
(direct) -> Rn |
2 |
24 |
MOV Rn,#data |
#data -> Rn |
2 |
12 |
MOV direct,A |
(A) -> direct |
2 |
12 |
MOV direct,Rn |
(Rn) -> direct |
2 |
24 |
MOV direct,direct |
(direct) -> direct |
3 |
24 |
MOV direct,@Ri |
( (Ri) ) -> direct |
2 |
24 |
MOV direct,#data |
#data -> direct |
3 |
24 |
MOV @Ri,A |
(A) -> (Ri) |
1 |
12 |
MOV @Ri,direct |
(direct) -> (Ri) |
2 |
24 |
MOV @Ri,#data |
#data -> (Ri) |
2 |
12 |
MOV DPTR,#data16 |
#data16 -> DPTR |
3 |
24 |
MOVC A,@A+DPTR |
( ( A) + ( DPTR ) ) -> A Обмен с внешне памятью программ |
1 |
24 |
MOVC A,@A+PC |
( ( A) + ( PC ) ) -> A |
1 |
24 |
MOVX A,@Ri |
( ( Ri) ) -> A Обмен с внешней памятью данных |
1 |
24 |
MOVX A,@DPTR |
( ( DPTR ) ) -> A |
1 |
24 |
MOVX @Ri,A |
(A) -> ( Ri) |
1 |
24 |
MOVX @DPTR,A |
(A) -> ( DPTR ) |
1 |
24 |
PUSH direct |
(direct) -> Stack Запись в стек |
2 |
24 |
POP direct |
(Stack) -> direct Извлечение из стека |
2 |
24 |
XCH A,Rn |
(A) <- > (Rn) Обмен содержимым |
1 |
12 |
XCH A,direct |
(A) <- > (direct) |
2 |
12 |
XCH A,@Ri |
(A) <- > ( (Ri) ) |
1 |
12 |
XCHD A,@Ri |
(A) <- > ( (Ri) ) Обмен младшей тетрадой |
1 |
12 |
4. Битовые операции. |
|||
CLR C |
0 -> с |
1 |
12 |
CLR bit |
0 -> bit |
2 |
12 |
SETB C |
1 -> c |
1 |
12 |
SETB bit |
1 -> bit |
2 |
12 |
CPL C |
not(c) -> c |
1 |
12 |
CPL bit |
not(bit) -> bit |
2 |
12 |
ANL C,bit |
( с ) и (bit) -> c |
2 |
24 |
ANL C,/bit |
( c ) и not(bit) -> c |
2 |
24 |
ORL C,bit |
( c ) или (bit) -> c |
2 |
24 |
ORL C,/bit |
( c ) или not(bit) -> c |
2 |
24 |
MOV C,bit |
(bit) -> c |
2 |
12 |
MOV bit,C |
( c ) -> bit |
2 |
24 |
JC rel |
если с = 1 , то переход по смещению rel |
2 |
24 |
JNC rel |
если с = 0 , то переход по смещению rel |
2 |
24 |
JB bit,rel |
если bit = 1 , то переход по смещению rel |
3 |
24 |
JNB bit,rel |
если bit = 0 , то переход по смещению rel |
3 |
24 |
JBC bit,rel |
если bit = 1 , то переход по смещению rel и сброс bit |
3 |
24 |
5. Команды передачи управления. |
|||
ACALL addr11 |
Вызов процедуры по адресу addr11 |
2 |
24 |
LCALL addr16 |
Вызов процедуры по адресу addr16 |
3 |
24 |
RET |
Возврат из процедуры |
1 |
24 |
RETI |
Возврат из процедуры обработки прерывания |
1 |
24 |
AJMP addr11 |
Безусловный переход по адресу addr11 |
2 |
24 |
LJMP addr16 |
Безусловный переход по адресу addr16 |
3 |
24 |
SJMP rel |
Безусловный переход по смещению rel |
2 |
24 |
JMP @A+DPTR |
Безусловный переход по смещению (A) относительно (DPTR) |
1 |
24 |
JZ rel |
Условный переход, если равно 0, по смещению rel |
2 |
24 |
JNZ rel |
Условный переход, если не равно 0, по смещению rel |
2 |
24 |
CJNE A,direct,rel |
Условный переход, если (A) не равно (direct), по смещению rel |
3 |
24 |
CJNE A,#data,rel |
Условный переход, если (A) не равно #data, по смещению rel |
3 |
24 |
CJNE Rn,#data,rel |
Условный переход, если (Rn) не равно #data, по смещению rel |
3 |
24 |
CJNE @Ri,#data,rel |
Условный переход, если ( (Ri) ) не равно #data, по смещению rel |
3 |
24 |
DJNZ Rn,rel |
Декремент Rn и условный переход, если не равно 0, по смещению rel |
2 |
24 |
DJNZ direct,rel |
Декремент direct и условный переход, если не равно 0, по смещению rel |
3 |
24 |
NOP |
Пустой оператор. |
1 |
12 |