Система команд ОМК Intel 8051

Группа команд передачи данных

Название команды Мнемокод КОП Операция
Пересылка в аккумулятор из регистра (n = 0 - 7) MOV A, Rn 11101rrr (A) = (Rn)
Пересылка в аккумулятор прямо адресуемого байта MOV A, ad   (A) = (ad)
Пересылка в аккумулятор байта из РДП (i = 0, 1) MOV A, @Ri 1110011i (A) = ((Ri))
Загрузка в аккумулятор константы MOV A, #d   (A) = #d
Пересылка в регистр из аккумулятора MOV Rn, A 11111rrr (Rn) = (A)
Пересылка в регистр прямо адресуемого байта MOV Rn, ad 10101rrr (Rn) = (ad)
Загрузка в регистр константы MOV Rn, #d 01111rrr (Rn) = #d
Пересылка по прямому адресу аккумулятора MOV ad, A   (ad) = (A)
Пересылка по прямому адресу регистра MOV ad, Rn 10001rrr (ad) = (Rn)
Пересылка прямо адресуемого байта по прямому адресу MOV add, ads   (add) = (ads)
Пересылка байта из РДП по прямому адресу MOV ad, @Ri 1000011i (ad) = ((Ri))
Пересылка по прямому адресу константы MOV ad, #d   (ad) = #d
Пересылка в РДП из аккумулятора MOV @Ri, A 1111011i ((Ri)) = (A)
Пересылка в РДП прямо адресуемого байта MOV @Ri, ad 0110011i ((Ri)) = (ad)
Пересылка в РДП константы MOV @Ri, #d 0111011i ((Ri)) = #d
Загрузка указателя данных MOV DPTR, #d16   (DPTR) = #d16
Пересылка в аккумулятор байта из ПП MOVC A, @A + DPTR   (A) = ((A) + (DPTR))
Пересылка в аккумулятор байта из ПП MOVC A, @A + PC   (PC) = (PC) + 1 (A) = ((A) + (PC))
Пересылка в аккумулятор байта из ВПД MOVX A, @Ri 1110001i (A) = ((Ri))
Пересылка в аккумулятор байта из расширенной ВПД MOVX A, @DPTR   (A) = ((DPTR))
Пересылка в ВПД из аккумулятора MOVX @Ri, A 1111001i ((Ri)) = (A)
Пересылка в расширенную ВПД из аккумулятора MOVX @DPTR, A   ((DPTR)) = (A)
Загрузка в стек PUSH ad   (SP) = (SP) + 1 ((SP)) = (ad)
Извлечение из стека POP ad   (ad) = (SP) (SP) = (SP) - 1
Обмен аккумулятора с регистром XCH A, Rn 11001rrr (A) <-> (Rn)
Обмен аккумулятора с прямо адресуемым байтом XCH A, ad   (A) <-> (ad)
Обмен аккумулятора с байтом из РДП XCH A, @Ri 1100011i (A) <-> ((Ri))
Обмен младшей тетрады аккумулятора с младшей тетрадой байта РДП XCHD A, @Ri 1101011i (A0-3) <-> ((Ri) 0-3)

Группа команд арифметических операций

Название команды Мнемокод КОП Операция
Сложение аккумулятора с регистром (n = 0 - 7) ADD A, Rn 00101rrr (A) = (A) + (Rn)
Сложение аккумулятора с прямо адресуемым байтом ADD A, ad   (A) = (A) + (ad)
Сложение аккумулятора с байтом из РПД (i = 0, 1) ADD A, @Ri 0010011i (A) = (A) + ((Ri))
Сложение аккумулятора с константой ADD A, #d   (A) = (A) + #d
Сложение аккумулятора с регистром и переносом ADDC A, Rn 00111rrr (A) = (A) + (Rn) + (C)
Сложение аккумулятора с прямо адресуемым байтом и переносом ADDC A, ad   (A) = (A) + (ad) + (C)
Сложение аккумулятора с байтом из РПД и переносом ADDC A, @Ri 0011011i (A) = (A) + ((Ri)) + (C)
Сложение аккумулятора с константой и переносом ADDC A, #d   (A) = (A) + #d + (C)
Десятичная коррекция аккумулятора DA A   Если (A0-3) > 9 \/ ((AC) = 1), то (A0-3) = (A0-3) + 6, затем если (A4-7) > 9 \/ ((C) = 1), то (A4-7) = (A4-7) + 6
Вычитание из аккумулятора регистра и заема SUBB A, Rn 10011rrr (A) = (A) - (C) - (Rn)
Вычитание из аккумулятора прямо адресуемого байта и заема SUBB A, ad   (A) = (A) - (C) - ((ad))
Вычитание из аккумулятора байта РПД и заема SUBB A, @Ri 1001011i (A) = (A) - (C) - ((Ri))
Вычитание из аккумулятора константы и заема SUBB A, #d   (A) = (A) - (C) - #d
Инкремент аккумулятора INC A   (A) = (A) + 1
Инкремент регистра INC Rn 00001rrr (Rn) = (Rn) + 1
Инкремент прямо адресуемого байта INC ad   (ad) = (ad) + 1
Инкремент байта в РПД INC @Ri 0000011i ((Ri)) = ((Ri)) +1
Инкремент указателя данных INC DPTR   (DPTR) = (DPTR) + 1
Декремент аккумулятора DEC A   (A) = (A) - 1
Декремент регистра DEC Rn 00011rrr (Rn) = (Rn) - 1
Декремент прямо адресуемого байта DEC ad   (ad) = (ad) - 1
Декремент байта в РПД DEC @Ri 0001011i ((Ri)) = ((Ri)) -1
Умножение аккумулятора на регистр B MUL AB   (B)(A) = (A)*(B)
Деление аккумулятора на регистр B DIV AB   (A).(B) = (A)/(B)

Группа команд логических операций

Название команды Мнемокод КОП Операция
Логическое И аккумулятора и регистра ANL A, Rn 01011rrr (A) = (A) /\ (Rn)
Логическое И аккумулятора и прямоадресуемого байта ANL A, ad   (A) = (A) /\ (ad)
Логическое И аккумулятора и байта из РПД ANL A, @Ri 0101011i (A) = (A) /\ ((Ri))
Логическое И аккумулятора и константы ANL A, #d   (A) = (A) /\ #d
Логическое И прямоадресуемого байта и аккумулятора ANL ad, A   (ad) = (ad) /\ (A)
Логическое И прямоадресуемого байта и константы ANL ad, #d   (ad) = (ad) /\ #d
Логическое ИЛИ аккумулятора и регистра ORL A, Rn 01001rrr (A) = (A) \/ (Rn)
Логическое ИЛИ аккумулятора и прямоадресуемого байта ORL A, ad   (A) = (A) \/ (ad)
Логическое ИЛИ аккумулятора и байта из РПД ORL A, @Ri 0100011i (A) = (A) \/ ((Ri))
Логическое ИЛИ аккумулятора и константы ORL A, #d   (A) = (A) \/ #d
Логическое ИЛИ прямоадресуемого байта и аккумулятора ORL ad, A   (ad) = (ad) \/ (A)
Логическое ИЛИ прямоадресуемого байта и константы ORL ad, #d   (ad) = (ad) \/ #d
Исключающее ИЛИ аккумулятора и регистра XRL A, Rn 01101rrr (A) = (A) \/ (Rn)
Исключающее ИЛИ аккумулятора и прямоадресуемого байта XRL A, ad   (A) = (A) \/ (ad)
Исключающее ИЛИ аккумулятора и байта из РПД XRL A, @Ri 0110011i (A) = (A) \/ ((Ri))
Исключающее ИЛИ аккумулятора и константы XRL A, #d   (A) = (A) \/ #d
Исключающее ИЛИ прямоадресуемого байта и аккумулятора XRL ad, A   (ad) = (ad) \/ (A)
Исключающее ИЛИ прямоадресуемого байта и константы XRL ad, #d   (ad) = (ad) \/ #d
Сброс аккумулятора CLR A   (A) = 0
Инверсия аккумулятора CPL A   (A) = (A)
Сдвиг аккумулятора влево циклически RL A   (An+1) = (An), n = 0? 6, (A0) = (A7)
Сдвиг аккумулятора влево через перенос RLC A   (An+1) = (An), n = 0? 6, (A0) = (C), (C) = (A7)
Сдвиг аккумулятора вправо циклически RR A   (A n) = (A n+1), n = 0 = 6, (A7) = (A0)
Сдвиг аккумулятора вправо через перенос RRC A   (A n) = (A n+1), n = 0 = 6, (A7) = (C), (C) = (A0)
Обмен местами тетрад в аккумуляторе SWAP A   (A0-3) <-> (A4-7)

Группа команд передачи управления

Название команды Мнемокод КОП Операция
Длинный переход в полном объеме памяти в программ LJMP ad16   (PC) = ad16
Абсолютный переход внутри страницы в 2 Кбайта AJMP ad11 a10a9a800001 (PC) = (PC) + 2 (PC0-10) = ad11
Короткий относительный переход внутри страницы в 256 байт SJMP rel   (PC) = (PC) + 2 (PC) = (PC) + rel
Косвенный относительный переход JMP @A+DPTR   (PC) = (A) + (DPTR)
Переход, если аккумулятор равен нулю 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, если (C) = 1, то (PC) = (PC) + rel
Переход, если перенос равен нулю JNC rel   (PC) = (PC) + 2, если (C) = 0, то (PC) = (PC) + rel
Переход, если бит равен единице JB bit, rel   (PC) = (PC) + 3, если (b) = 1, то (PC) = (PC) + rel
Переход, если бит равен нулю JNB bit, rel   (PC) = (PC) + 3, если (b) = 0, то (PC) = (PC) + rel
Переход, если бит установлен, с последующим сбросом бита JBC bit, rel   (PC) = (PC) + 3, если (b) = 1, то (b) = 0 и (PC) = (PC) + rel
Декремент регистра и переход, если не нуль DJNZ Rn, rel 11011rrr (PC) = (PC) + 2, (Rn) = (Rn) -1, если (Rn) ≠ 0, то (PC) = (PC) + rel
Декремент прямоадресуемого байта и переход, если не нуль DJNZ ad, rel   (PC) = (PC) + 2, (ad) = (ad) -1, если (ad) = 0, то (PC) = (PC) + rel
Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно CJNE A, ad, rel   (PC) = (PC) + 3, если (A) = (ad), то (PC) = (PC) + rel, если (A) < (ad), то (C) = 1, иначе (C) = 0
Сравнение аккумулятора с константой и переход, если не равно CJNE A, #d, rel   (PC) = (PC) + 3, если (A) = #d, то (PC) = (PC) + rel, если (A) < #d, то (C) = 1, иначе (C) = 0
Сравнение регистра с константой и переход, если не равно CJNE Rn, #d, rel 10111rrr (PC) = (PC) + 3, если (Rn) = #d, то (PC) = (PC) + rel, если (Rn) < #d, то (C) = 1, иначе (C) = 0
Сравнение байта в РПД с константой и переход, если не равно CJNE @Ri, #d, rel 1011011i (PC) = (PC) + 3, если ((Ri)) = #d, то (PC) = (PC) + rel, если ((Ri)) < #d, то (C) = 1, иначе (C) = 0
Длинный вызов подпрограммы LCALL ad16   (PC) = (PC) + 3, (SP) = (SP) + 1, ((SP)) = (PC0-7), (SP) = (SP) + 1, ((SP)) = (PC8-15), (PC) = ad16
Абсолютный вызов подпрограммы в пределах страницы в 2 Кбайта ACALL ad11 a10a9a810001 (PC) = (PC) + 2, (SP) = (SP) + 1, ((SP)) = (PC0-7), (SP) = (SP) + 1, ((SP)) = (PC8-15), (PC0-10) = ad11
Возврат из подпрограммы 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
Примечание: Ассемблер допускает использование обобщенного имени команд JMP и CALL, которые в процессе трансляции заменяются оптимальными по формату командами вызова (ACALL, LCALL) или перехода (AJMP, SJMP, LJMP).

Группа команд операции с битами

Название команды Мнемокод КОП Операция
Сброс переноса CLR C   (C) = 0
Сброс бита CLR bit   (b) = 0
Установка переноса SETB C   (C) = 1
Установка бита SETB bit   (b) = 1
Инверсия переноса CPL C   (C) = (C)
Инверсия бита CPL bit   (b) = (b)
Логическое И бита и переноса ANL C, bit   (C) = (C) /\ (b)
Логическое И инверсии бита и переноса ANL C, /bit   (C) = (C) /\ (b)
Логическое ИЛИ бита и переноса ORL C, bit   (C) = (C) \/ (b)
Логическое ИЛИ инверсии бита и переноса ORL C, /bit   (C) = (C) \/ (b)
Пересылка бита в перенос MOV C, bit   (C) = (b)
Пересылка переноса в бит MOV bit, C   (b) = (C)

Приложение 2


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: