Основы программирования микропроцессоров
intel8051

Команды ассемблера

    Все команды ассемблера делятся на 5 групп:
  1. Команды передачи данных
  2. Арифметические команды
  3. Логические команды
  4. Команды битовых операций
  5. Команды передачи управления

Сокращения: РПД - регистр памяти данных, ВДП - внешняя память данных,
ПП - Постоянная память (ROM), КОП - код операции, <> - "не равно"
Название команды Мнемокод КОП Т Б Ц Операция

1. Группа команд передачи данных
Пересылка в аккумулятор из
регистра(n=0_7)
MOV A,Rn 11101rrr 1 1 1 (A) <= (Rn)
Пересылка в аккумулятор
прямоадресуемого байта
MOV A,ad 11100101 3 2 1 (A) <= (ad)
Пересылка в аккумулятор байта
из РПД(i=0,1)
MOV A,@Ri 1110011i 1 1 1 (A) <= ((Ri))
Загрузка в аккумулятор
константы
MOV A,#d 01110100 2 2 1 (A) <= #d
Пересылка в регистр из
аккумулятора
MOV Rn,A 11111rrr 1 1 1 (Rn) <= (A)
Пересылка в регистр
прямоадресуемого байта
MOV Rn,ad 10101rrr 3 2 2 (Rn) <= (ad)
Пересылка в регистр
константы
MOV Rn,#d 01111rrr 2 2 1 (Rn) <= #d
Пересылка по прямому адресу
аккумулятора
MOV ad,A 11110101 3 2 1 (ad) <= (A)
Пересылка по прямому адресу
регистра
MOV ad,Rn 10001rrr 3 2 2 (ad) <= (Rn)
Пересылка прямоадресуемого
байта по прямому адресу
MOV add,ads 10000101 9 3 2 (add) <= (ads)
Пересылка байта из РПД по
прямому адресу
MOV ad,@Ri 1000011i 3 2 2 (ad) <= ((Ri))
Пересылка по прямому адресу
константы
MOV ad,#d 01110101 7 3 2 (ad) <= #d
Пересылка в РПД из
аккумулятора
MOV @Ri,A 1111011i 1 1 1 ((Ri)) <= (A)
Пересылка в РПД
прямоадресуемого байта
MOV @Ri,ad 0110011i 3 2 2 ((Ri)) <= (ad)
Пересылка в РПД константы MOV @Ri,#d 0111011i 2 2 1 ((Ri)) <= #d
Загрузка указателя данных MOV DPTR,#d16 10010000 13 3 2 (DPTR) <= #d16
Пересылка в аккумулятор байта
из ПП
MOVC A,@A+DPTR 10010011 1 1 2 (A) <= ((A) + (DPTR))
Пересылка в аккумулятор байта
из ПП
MOVC A,@A+PC 10000011 1 1 2 (PC) <= (PC) + 1;
(A) <= ((A) + (PC))
Пересылка в аккумулятор байта
из ВПД
MOVX A,@Ri 1110001i 1 1 2 (A) <= ((Ri))
Пересылка в аккумулятор байта
из расширенной ВПД
MOVX A,@DPTR 11100000 1 1 2 (A) <= ((DPTR))
Пересылка в ВПД из аккумулятора MOVX @Ri,A 1111001i 1 1 2 ((Ri)) <= (A)
Пересылка в расширенную ВПД
из аккумулятора
MOVX @DPTR,A 11110000 1 1 2 ((DPTR)) <= (A)
Загрузка в стек PUSH ad 11000000 3 2 2 (SP) <= (SP) + 1
((SP)) <= (ad)
Извлечение из стека POP ad 11010000 3 2 2 (ad) <= ((SP))
(SP) <= (SP) - 1
Обмен аккумулятора с регистром XCH A,Rn 11001rrr 1 1 1 (A) <=> (Rn)
Обмен аккумулятора с
прямоадресуемым байтом
XCH A,ad 11000101 3 2 1 (A) <=> (ad)
Обмен аккумулятора с байтом
из РПД
XCH A,@Ri 1100011i 1 1 1 (A) <=> ((Ri))
Обмен младшей тетрады
аккумулятора с младшей
тетрадой РПД
XCHD A,@Ri 1101011i 1 1 1 (A0_3) <=> ((Ri)0_3)

2. Группа команд арифметических операций
Сложение аккумулятора
регистром(n=0_7)
ADD A,Rn 00101rrr 1 1 1 (A) <= (A) + (Rn)
Сложение аккумулятора с
прямоадресуемым байтом
ADD A,ad 00100101 3 2 1 (A) <= (A) + (ad)
Сложение аккумулятора с байтом
из РПД(i=0,1)
ADD A,@Ri 0010011i 1 1 1 (A) <= (A) +((Ri))
Сложение аккумулятора с
константой
ADD A,#d 00100100 2 2 1 (A) <= (A) + #d
Сложение аккумулятора с
регистром и переносом
ADDC A,Rn 00111rrr 1 1 1 (A) <= (A) + (Rn) + (C)
Сложение аккумулятора с
прямоадресуемым байтом и
переносом
ADDC A,ad 00110101 3 2 1 (A) <= (A) + (ad) + (C)
Сложение аккумулятора с байтом
из РПД и переносом
ADDC A,@Ri 0011011i 1 1 1 (A) <= (A) + ((Ri)) + (C)
Сложение аккумулятора с
константой и переносом
ADDC A,#d 00110100 2 2 1 (A) <= (A) + #d + (C)
Десятичная коррекция
аккумулятора
DA A 11010100 1 1 1 Если (A0_3) > 9 || ((AC)=1),
то (A0_3) <= (A0_3) + 6,
затем если (A4_7) > 9 || ((C)=1),
то (A4_7) <= (A4_7) + 6
Вычитание из аккумулятора
регистра и заема
SUBB A,Rn 10011rrr 1 1 1 (A) <= (A) - (C) - (Rn)
Вычитание из аккумулятора
прямоадресуемого байта и заема
SUBB A,ad 10010101 3 2 1 (A) <= (A) - (C) - (ad)
Вычитание из аккумулятора байта
из РПД и заема
SUBB A,@Ri 1001011i 1 1 1 (A) <= (A) - (C) - ((Ri))
Вычитание из аккумулятора
константы и заема
SUBB A,#d 10010100 2 1 1 (A) <= (A) - (C) - #d
Инкремент аккумулятора INC A 00000100 1 1 1 (A) <= (A) + 1
Инкремент регистра INC Rn 00001rrr 1 1 1 (Rn) <= (Rn) + 1
Инкремент прямоадресуемого байта INC ad 00000101 3 2 1 (ad) <= (ad) + 1
Инкремент байта из РПД INC @Ri 0000011i 1 1 1 ((Ri)) <= ((Ri)) + 1
Инкремент указателя данных INC DPTR 10100011 1 1 2 (DPTR) <= (DPTR) + 1
Декремент аккумулятора DEC A 00010100 1 1 1 (A) <= (A) - 1
Декремент регистра DEC Rn 00011rrr 1 1 1 (Rn) <= (Rn) - 1
Декремент прямоадресуемого байта DEC ad 00010101 3 2 1 (ad) <= (ad) - 1
Декремент байта из РПД DEC @Ri 0001011i 1 1 1 ((Ri)) <= ((Ri)) - 1
Умножение аккумулятора на
регистр В
MUL AB 10100100 1 1 4 (B)(A) <= (A)*(B)
Деление аккумулятора на
регистр В
DIV AB 10000100 1 1 4 (A)(B) <= (A)/(B)

3. Группа команд логических операций
Логическое И аккумулятора и
регистра
ANL A,Rn 01011rrr 1 1 1 (A) <= (A) && (Rn)
Логическое И аккумулятора и
прямоадресуемого байта
ANL A,ad 01010101 3 2 1 (A) <= (A) && (ad)
Логическое И аккумулятора и
байта из РПД
ANL A,@Ri 0101011i 1 1 1 (A) <= (A) && ((Ri))
Логическое И аккумулятора и
константы
ANL A,#d 01010100 2 2 1 (A) <= (A) && #d
Логическое И прямоадресуемого
байта и аккумулятора
ANL ad,A 01010010 3 2 1 (ad) <= (ad) && (A)
Логическое И прямоадресуемого
байта и константы
ANL ad,#d 01010011 7 3 2 (ad) <= (ad) && #d
Логическое ИЛИ аккумулятора и
регистра
ORL A,Rn 01001rrr 1 1 1 (A) <= (A) || (Rn)
Логическое ИЛИ аккумулятора и
прямоадресуемого байта
ORL A,ad 01000101 3 2 1 (A) <= (A) || (ad)
Логическое ИЛИ аккумулятора и
байта из РПД
ORL A,@Ri 0100011i 1 1 1 (A) <= (A) || ((Ri))
Логическое ИЛИ аккумулятора и
константы
ORL A,#d 01000100 2 2 1 (A) <= (A) || #d
Логическое ИЛИ прямоадресуемого
байта и аккумулятора
ORL ad,A 01000010 3 2 1 (ad) <= (ad) || (A)
Логическое ИЛИ прямоадресуемого
байта и константы
ORL ad,#d 01000011 7 3 2 (ad) <= (ad) || #d
Исключающее ИЛИ аккумулятора и
регистра
XRL A,Rn 01101rrr 1 1 1 (A) <= (A) ^ (Rn)
Исключающее ИЛИ аккумулятора и
прямоадресуемого байта
XRL A,ad 01100101 3 2 1 (A) <= (A) ^ (ad)
Исключающее ИЛИ аккумулятора и
байта из РПД
XRL A,@Ri 0110011i 1 1 1 (A) <= (A) ^ ((Ri))
Исключающее ИЛИ аккумулятора и
константы
XRL A,#d 01100100 2 2 1 (A) <= (A) ^ #d
Исключающее ИЛИ прямоадресуемого
байта и аккумулятора
XRL A,#d 01100100 2 2 1 (A) <= (A) ^ #d
Исключающее ИЛИ прямоадресуемого
байта и константы
XRL ad,#d 01100011 7 3 2 (ad) <= (ad) ^ #d
Сброс аккумулятора CLR A 11100100 1 1 1 (A) <= 0
Инверсия аккумулятора CPL A 11110100 1 1 1 (A) <= ~(A)
Циклический сдвиг аккумулятора
влево
RL A 00100011 1 1 1 (An+1) <= (An) n=0_6;
(A0) <= (A7)
Сдвиг аккумулятора влево через
перенос
RLC A 00110011 1 1 1 (An+1) <= (An) n=0_6;
(A0) <= (C) ; (C) <= (A7)
Циклический сдвиг аккумулятора
вправо
RR A 00000011 1 1 1 (An) <= (An+1) n=0_6;
(A7) <= (A0)
Сдвиг аккумулятора вправо через
перенос
RRC 00010011 1 1 1 (An) <= (An+1) n=0_6;
(A7) <= (C) ; (C) <= (A0)
Обмен местами тетрад в
аккумуляторе
SWAP A 11000100 1 1 1 (A0_3) <=> (A4_7)

4. Группа команд операций с битами
Сброс переноса CLR C 11000011 1 1 1 (C) <= 0
Сброс бита CLR bit 11000010 4 2 1 (bit) <= 0
Установка переноса SETB C 11010011 1 1 1 (C) <= 1
Установка бита SETB bit 11010010 4 2 1 (bit) <= 1
Инверсия переноса CPL C 10110011 1 1 1 (C) <= !(C)
Инверсия бита CPL bit 10110010 4 2 1 (bit) <= !(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) <= (C) || !(bit)
Пересылка бита в перенос MOV C,bit 10100010 4 2 1 (C) <= (bit)
Пересылка переноса в бит MOV bit,C 10010010 4 2 2 (bit) <= (C)

5. Группа команд передачи управления (управления последовательностью)
Длинный переход
в полном объеме памяти
LJMP ad16 00000010 12 3 2 (PC) <= ad16
Абсолютный переход
внутри страницы в 2Кб
AJMP ad11 a10a9a8
00001
6 2 2 (PC) <= (PC) + 2
(PC0_10) <= ad11
Короткий относительный переход
внутри страницы в 256 байт
SJMP rel 10000000 5 2 2 (PC) <= (PC) + 2
(PC) <= (PC) + rel
Косвенный относительный переход JMP @A+DPTR 01110011 1 1 2 (PC) <= (A) + (DPTR)
Переход, если аккумулятор равен
нулю
JZ rel 01100000 5 2 2 (PC) <= (PC) + 2, если
(A)=0, то
(PC) <= (PC) + rel
Переход, если аккумулятор
не равен нулю
JNZ rel 01110000 5 2 2 (PC) <= (PC) + 2, если
(A)<>0, то
(PC) <= (PC) + rel
Переход, если перенос равен
единице
JC rel 01000000 5 2 2 (PC) <= (PC) + 2, если
(C)=1, то
(PC) <= (PC) + rel
Переход, если перенос равен нулю JNC rel 01010000 5 2 2 (PC) <= (PC) + 2, если
(C)=0, то
(PC) <= (PC) + rel
Переход, если бит равен единице JB bit,rel 00100000 11 3 2 (PC) <= (PC) + 3, если
(bit)=1, то
(PC) <= (PC) + rel
Переход, если бит равен нулю JNB bit,rel 00110000 11 3 2 (PC) <= (PC) + 3, если
(bit)=0, то
(PC) <= (PC) + rel
Переход, если бит установлен,
с последующим сбросом бита
JBC bit,rel 00010000 11 3 2 (PC) <= (PC) + 3, если
(bit)=0, то (bit) <= 0
(PC) <= (PC) + rel
Декремент регистра и переход,
если не нуль
DJNZ Rn,rel 11011rrr 5 2 2 (PC) <= (PC) + 2
(Rn) <= (Rn) - 1,если
(Rn)<>0,то (PC) <= (PC) + rel
Декремент прямоадресуемого байта
и переход, если не нуль
DJNZ ad,rel 11010101 8 3 2 (PC) <= (PC) + 2
(ad) <= (ad) - 1,если
(ad)<>0,то (PC) <= (PC) + rel
Сравнение аккумулятора с
прямоадресуемым байтом и
переход, если не равно
CJNE A,ad,rel 10110101 8 3 2 (PC) <= (PC) + 3,если
(A)<>(ad), то (PC) <= (PC) + rel,
если (A)<(ad), то (C) <= 1, иначе
(C) <= 0
Сравнение аккумулятора с
константой и переход,
если не равно
CJNE A,#d,rel 10110100 10 3 2 (PC) <= (PC) + 3,если
(A)<>#d, то (PC) <= (PC) + rel,
если (A)<#d, то (C) <= 1, иначе
(C) <= 0
Сравнение регистра с константой
и переход, если не равно
CJNE Rn,#d,rel 10111rrr 10 3 2 (PC) <= (PC) + 3,если
(Rn)<>#d, то (PC) <= (PC) + rel,
если (Rn)<#d, то (C) <= 1, иначе
(C) <= 0
Сравнение байта в РПД с
константой и переход,
если не равно
CJNE @Ri,#d,rel 1011011i 10 3 2 (PC) <= (PC) + 3,если
((Ri))<>#d, то (PC) <= (PC) + rel,
если ((Ri))<#d, то (C) <= 1, иначе
(C) <= 0
Длинный вызов подпрограммы LCALL ad16 00010010 12 3 2 (PC) <= (PC) + 3; (SP) <= (SP) + 1
((SP)) <= (PC0_7); (SP) <= (SP) + 1
((SP)) <= (PC8_15); (PC) <= ad16
Абсолютный вызов подпрограммы
в пределах страницы в 2Кб
ACALL ad11 a10a9a8
10001
6 2 2 (PC) <= (PC) + 2; (SP) <= (SP) + 1
((SP)) <= (PC0_7); (SP) <= (SP) + 1
((SP)) <= (PC8_15); (PC0_10) <= ad11
Возврат из подпрограммы RET 00100010 1 1 2 (PC8_15) <= ((SP)); (SP) <= (SP) - 1
(PC0_7) <= ((SP)); (SP) <= (SP) - 1
Возврат из подпрограммы
обработки прерывания
RETI 00110010 1 1 1 (PC8_15) <= ((SP)); (SP) <= (SP) - 1
(PC0_7) <= ((SP)); (SP) <= (SP) - 1
Холостая команда NOP 00000000 1 1 1 (PC) <= (PC) + 1

Hosted by uCoz