В данной статье представлена система команд для микроконтроллеров MCS-51. Она будем полезна тем кто работает с этими микроконтроллерами не так давно и не помнит всех команд, сколько байт они занимают и за сколько машинных циклов выполняются.
КОМАНДЫ ПЕРЕСЫЛКИ, ОБМЕНА И ЗАГРУЗКИ
Комментарии | Мнемокод | К О П | ТК | Б | МЦ |
A ← Rn; Пересылка из РОНа в Акк | MOV A,Rn | 11101rrr | 1 | 1 | 1 |
A ← (Ri); Пересыдка из РПД в Акк | MOV A,@Ri | 1110011i | 1 | 1 | 1 |
A ← (dir); Пересылка из РПД в Акк | MOV A,dir | 11100101 | 3 | 2 | 1 |
A ← #DAT; Загрузка байта в Акк | MOV A,#DAT | 01110100 | 2 | 2 | 1 |
Rn ← A; Пересылка из Акк. в РОН | MOV Rn,A | 11111rrr | 1 | 1 | 1 |
(Ri) ← A; Пересылка из Акк. в РПД | MOV @Ri,A | 1111011i | 1 | 1 | 1 |
(dir) ← A; Пересылка из Акк. в РПД | MOV dir,A | 11110101 | 3 | 2 | 1 |
(dir) ← #DAT; Загрузка байта в РПД | MOV dir,#DAT | 01110101 | 7 | 3 | 2 |
Rn ← #DAT; Загрузка байта в РОН | MOV Rn,#DAT | 01111rrr | 2 | 2 | 1 |
(Ri) ← #DAT; Загрузка байта в РПД | MOV @Ri,#DAT | 0111011i | 2 | 2 | 1 |
(dir)←(dir); Пересыл. из РПД в РПД | MOV dir,dir | 10000101 | 9 | 3 | 2 |
Rn ← (dir); Пересылка из РПД в РОН | MOV Rn, dir | 10101rrr | 3 | 2 | 2 |
(Ri)←(dir); Пересылка из РПД в РПД | MOV @RI,dir | 1010011i | 3 | 2 | 2 |
(dir)←Rn; Пересылка из РОНа в РПД | MOV dir, Rn | 10001rrr | 3 | 2 | 2 |
(dir)←(Ri); Пересылка из РПД в РПД | MOV dir,@Ri | 1000011i | 3 | 2 | 2 |
DPTR←#D16; Загрузка слова в DPTR | MOV DPTR,#D16 | 10010000 | 13 | 3 | 2 |
A ↔ Rn; Обмен Акк. с РОНом | XCH A, Rn | 11001rrr | 1 | 1 | 1 |
A ↔ (Ri); Обмен Акк. с РПД | XCH A, @Ri | 1100011i | 1 | 1 | 1 |
A ↔(dir); Обмен Акк. с РПД | XCH A, dir | 11000101 | 3 | 2 | 1 |
Обмен младших тетрад Акк. с РПД | XCHD A, @Ri | 1101011i | 1 | 1 | 1 |
Обмен тетрад Аккумулятора | SWAP A | 11000100 | 1 | 1 | 1 |
SP←SP+1;(SP)←(dir); Запись в стек | PUSH dir | 11000000 | 3 | 2 | 2 |
(dir)←(SP);SP←SP–1; Чтение из стека | POP dir | 11010000 | 3 | 2 | 2 |
A←(DPTR);Пересылка из ВПД в Акк. | MOVX A,@DPTR | 11100000 | 1 | 1 | 2 |
(DPTR)←A;Пересылка из Акк. в ВПД | MOVX @DPTR,A | 11110000 | 1 | 1 | 2 |
A←(Ri); Пересылка из ВПД в Акк. | MOVX A,@Ri | 1110001i | 1 | 1 | 2 |
(Ri)←A; Пересылка из Акк. в ВПД | MOVX @Ri,A | 1111001i | 1 | 1 | 2 |
A←((A+DPTR));Пересылка б из ПП в Акк. | MOVC A,@A+DPTR | 10010011 | 1 | 1 | 2 |
A←((A+PC));Пересылка из ПП в Акк. | MOVC A,@A+PC | 10000011 | 1 | 1 | 2 |
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ
Комментарии | Мнемокод | К О П | ТК | Б | МЦ |
A←A+Rn; Сложение Акк. с РОНом | ADD A,Rn | 00101rrr | 1 | 1 | 1 |
A←A+(Ri); Сложение Акк. с РПД | ADD A, @Ri | 0010011i | 1 | 1 | 1 |
A←A+(dir); Сложение Акк. с РПД | ADD A, dir | 00100101 | 3 | 2 | 1 |
A←A+#DAT; Сложение Акк. с #DAT | ADD A,#DAT | 00100100 | 2 | 2 | 1 |
A ← A + Rn + C; | ADDC A, Rn | 00111rrr | 1 | 1 | 1 |
A ← A + (Ri) + C; | ADDC A, @Ri | 0011011i | 1 | 1 | 1 |
A ← A + (dir) + C; | ADDC A, dir | 00110101 | 3 | 2 | 1 |
A ← A + #DAT + C; | ADDC A,#DAT | 00110100 | 2 | 2 | 1 |
Десятичная коррекция Аккумулятора | DA A | 11010100 | 1 | 1 | 1 |
A ← A – Rn – C; | SUBB A,Rn | 10011rrr | 1 | 1 | 1 |
A ← A – (Ri) – C; | SUBB A, @Ri | 1001011i | 1 | 1 | 1 |
A ← A – (dir) – C; | SUBB A,dir | 10010101 | 3 | 2 | 1 |
A ← A – #DAT – C; | SUBB A,#DAT | 10010100 | 2 | 2 | 1 |
A < = A + 1; Инкремент Аккумул. | INC A | 00000100 | 1 | 1 | 1 |
Rn ← Rn + 1; Инкремент РОНа | INC Rn | 00001rrr | 1 | 1 | 1 |
(Ri) ← (Ri) + 1;Инкремент РПД | INC @Ri | 0000011i | 1 | 1 | 1 |
(dir) ← (dir) + 1; Инкремент РПД | INC dir | 00000101 | 3 | 2 | 1 |
DPTR←DPTR+1; Инкремент DPTR | INC DPTR | 10100011 | 1 | 1 | 2 |
A ← A – 1; Декремент Аккумул. | DEC A | 00010100 | 1 | 1 | 1 |
Rn ← Rn – 1; Декремент РОНа | DEC Rn | 00011rrr | 1 | 1 | 1 |
(Ri) ← (Ri) – 1; Декремент РПД | DEC @Ri | 0001011i | 1 | 1 | 1 |
(dir) ← (dir) – 1; Декремент РПД | DEC dir | 00010101 | 3 | 2 | 1 |
BA ← A * B; Умножение A на B | MUL AB | 10100100 | 1 | 1 | 4 |
A.B ← A / B; Деление A на B | DIV AB | 10000100 | 1 | 1 | 4 |
A ← A & Rn; Лог. «И» Акк. и РОНа | ANL A,Rn | 01011rrr | 1 | 1 | 1 |
A ← A & (Ri); Лог.»И» Акк. и РПД | ANL A,@Ri | 0101011i | 1 | 1 | 1 |
A ← A & (dir); Лог.»И» Акк. и РПД | ANL A,dir | 01010101 | 3 | 2 | 1 |
A←A & #DAT; Лог.»И» Акк. и #DAT | ANL A,#DAT | 01010100 | 2 | 2 | 1 |
(dir) ← (dir) & A; Лог.»И» РПД и Акк | ANL dir, A | 01010010 | 3 | 2 | 1 |
(dir) ← (dir) & #DAT ; | ANL dir,#DAT | 01010011 | 7 | 3 | 2 |
A ← A \/ Rn; Лог.»ИЛИ» Акк. и РОНа | ORL A,Rn | 01001rrr | 1 | 1 | 1 |
A ← A \/ (Ri); Лог.»ИЛИ» Акк. и РПД | ORL A,@Ri | 0100011i | 1 | 1 | 1 |
A ← A \/ (dir);Лог.»ИЛИ» Акк. и РПД | ORL A, dir | 01000101 | 3 | 2 | 1 |
A ← A \/ #DAT; | ORL A,#DAT | 01000100 | 2 | 2 | 1 |
(dir) ← (dir) \/ A; | ORL dir, A | 01000010 | 3 | 2 | 1 |
(dir) ← (dir) \/ #DAT; | ORL dir,#DAT | 01000011 | 7 | 3 | 2 |
A←A (+) Rn;»Искл.ИЛИ» Акк. и РОН | XRL A, Rn | 01101rrr | 1 | 1 | 1 |
A ← A (+) (Ri); | XRL A, @Ri | 0110011i | 1 | 1 | 1 |
A ← A (+) (dir); | XRL A, dir | 01100101 | 3 | 2 | 1 |
A ← A (+) #DAT; | XRL A,#DAT | 01100100 | 2 | 2 | 1 |
(dir) ← (dir) (+) A; | XRL dir,A | 01100010 | 3 | 2 | 1 |
(dir) ← (dir) (+) #DAT; | XRL dir,#DAT | 01100011 | 7 | 3 | 2 |
A ← 0; Сброс Аккумулятора | CLR A | 11100100 | 1 | 1 | 1 |
A ← ~A; Инверсия Аккумулятора | CPL A | 11110100 | 1 | 1 | 1 |
Циклический сдвиг влево Акк. | RL A | 00100011 | 1 | 1 | 1 |
Цикл.сдвиг влево Акк. через перенос | RLC A | 00110011 | 1 | 1 | 1 |
Циклический сдвиг вправо Акк. | RR A | 00000011 | 1 | 1 | 1 |
Цикл.сдвиг вправо Акк.через перенос | RRC A | 00010011 | 1 | 1 | 1 |
ОПЕРАЦИИ С БИТАМИ
Комментарии | Мнемокод | К О П | ТК | Б | МЦ |
С ← 0; Сброс флага С | CLR C | 11000011 | 1 | 1 | 1 |
C ← 1; Установка флага С | SETB C | 11010011 | 1 | 1 | 1 |
С ← ~C; Инверсия флага С | CPL C | 10110011 | 1 | 1 | 1 |
(bit) ← 0; Сброс прямоадресуем.бита | CLR bit | 11000010 | 4 | 2 | 1 |
(bit) ← 1; Установка «бита» | SETB bit | 11010010 | 4 | 2 | 1 |
(bit) ← ~(bit); Инверсия «бита» | CPL bit | 10110010 | 4 | 2 | 1 |
C ← C & (bit); Лог.»И» С и «бита» | ANL C,bit | 10000010 | 4 | 2 | 2 |
C ← C & ~(bit); «И» С и инверс.бита | ANL C,/bit | 10110000 | 4 | 2 | 2 |
C ← C \/ (bit); Лог.»ИЛИ» С и бита | ORL C,bit | 01110010 | 4 | 2 | 2 |
C ← C \/ ~(bit); Лог.»ИЛИ» Синверсии прямоадресуемого бита | ORL C,/bit | 10100000 | 4 | 2 | 2 |
C ← (bit); Пересылка изпрямоадресуемого бита во флаг С | MOV C,bit | 10100010 | 4 | 2 | 1 |
(bit) ← C; Пересылка из С в «бит» | MOV bit,C | 10010010 | 4 | 2 | 2 |
КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ
Комментарии | Мнемокод | К О П | ТК | Б | МЦ |
PC ← PC + 2 + rel, если А = 0 | JZ rel | 01100000 | 5 | 2 | 2 |
PC ← PC + 2 + rel, если А <> 0 | JNZ rel | 01110000 | 5 | 2 | 2 |
PC ← PC + 2 + rel, если флаг С = 1 | JC rel | 01000000 | 5 | 2 | 2 |
PC ← PC + 2 + rel, если флаг С = 0 | JNC rel | 01010000 | 5 | 2 | 2 |
PC ← PC + 3 + rel, если (bit) = 1 | JB bit,rel | 00100000 | 11 | 3 | 2 |
PC ← PC + 3 + rel, если (bit) = 0 | JNB bit,rel | 00110000 | 11 | 3 | 2 |
PC ← PC + 3 + rel, если (bit) = 1,(bit) ← 0 | JBC bit,rel | 00010000 | 11 | 3 | 2 |
PC ← PC + 3 + rel,если A<>#DAT,C ← 1,
если A < #DAT,С ← 0, если A > #DAT |
CJNEA, #DAT, rel | 10110100 | 10 | 3 | 2 |
PC ← PC + 3 + rel,если Rn<>#DAT,C ← 1,
если Rn < #DAT,С ← 0, если Rn > #DAT |
CJNERn, #DAT, rel | 10111rrr | 10 | 3 | 2 |
PC←PC + 3 + rel,если(@Ri)<>#DAT,C ← 1,
если (@Ri) < #DAT,С ← 0, если (@Ri) > #DAT |
CJNE@Ri, #DAT, rel | 1011011i | 10 | 3 | 2 |
PC ← PC + 3 + rel,если A<>(dir),C ← 1,
если A < (dir),С ← 0, если A > (dir) |
CJNEA, dir, rel | 10110101 | 8 | 3 | 2 |
PC ← PC + 2 + rel, если Rn – 1 <> 0 | DJNZ Rn, rel | 11011rrr | 5 | 2 | 2 |
PC ← Pc + 3 + rel, если (dir) – 1 <> 0 | DJNZ dir,rel | 11010101 | 8 | 3 | 2 |
КОМАНДЫ БЕЗУСЛОВНЫХ ПЕРЕХОДОВ
Комментарии | Мнемокод | К О П | ТК | Б | МЦ |
PC[0_15]←16ADR; Длинный переход | LJMP 16ADR | 00000010 | 12 | 3 | 2 |
PC[0_11] ← 11ADR;Переходвнутри страницы в 2 Кбайта | AJMP 11ADR | sss00001 | 6 | 2 | 2 |
PC ← PC + 2 + rel;Относит.переход | SJMP rel | 10000000 | 5 | 2 | 2 |
PC ← A + DPTR; Косвенныйотносительный переход | JMP @A+DPTR | 01110011 | 1 | 1 | 2 |
(SP) ← PC + 3; PC[0_15] ←16ADR;Длинный вызов подпрограммы | LCALL 16ADR | 00010010 | 12 | 3 | 2 |
(SP) ← PC + 2;PC[0_10]←11ADR;Вызов подпр. внутри страницы в 2Кб | ACALL 11ADR | sss10001 | 6 | 2 | 2 |
PC ← (SP); Возврат из подпрограммы | RET | 00100010 | 1 | 1 | 2 |
PC ← (SP); Возврат изподпрограммы обработки прерываний | RETI | 00110010 | 1 | 1 | 2 |
PC ← PC + 1; Холостая команда | NOP | 00000000 | 1 | 1 | 1 |