Система команд МК51. Классификация и общая характеристика, отличие от системы команд МК48.
Система команд содержит 111 базовых команд. По функциональному признаку делятся на 5 групп: команды передачи данных, арифметические операции, логические операции, передача управления и операций с битами. В отличие от МК48 имеются команды умножения, деления, вычитания, операции над битами и более широкий набор команд передачи управления. Состав операндов МК51 включает в себя биты, 4-х битные цифры, байты и 16-ти битные слова. Используется 4 вида адресации: прямая, косвенная, непосредственная, неявная.
Слово состояния программы:
C (7) – флаг переноса (аппаратно и программно изменяемый) – при выполнении арифметических и логических операций.
АС (6) – флаг вспомогательного переноса (аппаратно изменяемый) – при выполнении команд сложения и вычитания (перенос или заем в бите 3).
F0 (5) – флаг 0. Флаг пользователя.
RS1(4)ü
ý Выбор банка регистров.
RS0(3)þ
0V (2) – флаг переполнения (аппаратно изменяемый) – при выполнении арифметических операций.
-- (1) – не используется.
Р (0) – флаг паритета (аппаратно изменяемый) – контроль четности количества битов в аккумуляторе.
Группа команд передачи данных.
Все команды не влияют на флаги кроме загрузки PSW и ACC. В отличие от команд МК48, передача данных в МК51 может выполняться без участия ACC.
MOV A, Rn – (A)¬(Rn) , n=0..7; MOV A, @Ri –(A)¬((Ri)), i=0,1; MOV Rn, #d –(Rn)¬#d;
MOV A, #d – (A)¬#d; MOV Rn, ad –(Rn)¬(ad); MOV ad, A –(ad)¬(A);
MOV Rn,A –(Rn)¬(A); MOV A, ad – (A)¬(ad) ; MOV ad, Rn --(ad)¬(Rn);
MOV add, ads –(add)¬(ads); MOV ad, @Ri --(ad)¬((Ri)); MOV ad, #d –(ad)¬#d;
MOV @Ri, A –((Ri))¬(A); MOV @Ri, ad –((Ri))¬(ad); MOV @Ri, #d –((Ri))¬#d;
MOV DPTR,#d16 –(DPTR)¬#d16; MOVX A,@Ri –(A)¬(Ri) (из ВПД)
MOVX A, @DPTR –(A)¬((DPTR)) (из расширенной ВПД);
MOVX @Ri, A –((Ri))¬(A); (в ВПД);
MOVX @DPTR, A –((DPTR))¬(A); (в расширенную ВПД);
PUSH ad – (SP)¬(SP)+1, ((SP))¬ad; POP ad –(ad)¬((SP)), (SP)¬(SP)-1;
XCH A, Rn –(A)«(Rn); XCH A, ad –(A)«(ad); XCH A, @Ri –(A)«((Ri));
XCHD A, @Ri –(A0-3)«((Ri)0-3);
MOVC A, @A+DPTR –(A)¬((A)+(DPTR));
MOVC A, @A+PC –(PC)¬(PC)+1, (A)¬((A)+(PC));
Команды арифметических операций.
ADD A, операнд (Rn, ad, @Ri, #d) –(A)¬(A)+(операнд); ADDC A, операнд (A)¬(A)+(операнд)+( C );
DA A десятичная коррекция ACC; SUBB A, операнд (A)¬(A)-( C )-(операнд);
INC операнд инкремент; DEC операнд декремент;
MUL AB (B)(A)¬(A)·(B); DIV AB (A).(B)¬(A)/(B);
Команды логических операций.
ANL A, операнд (A)¬(A) and (операнд); ANL ad, операнд (ad)¬(ad) and (операнд);
ORL A, операнд (A)¬(A) or (операнд); ORL ad, операнд (ad)¬(ad) or (операнд);
XRL A, операнд (A)¬(A) xor (операнд); XRL ad, операнд (ad)¬(ad) xor (операнд);
SWAP A (A0-3)«(A4-7); CLR A (A)¬0;
CPL A (A)¬ not (A); RL A (An+1)¬(An), n=0..6, A0¬A7;
RR A сдвиг вправо; RLC A (An+1)¬(An), A0¬(C), (C)¬A7;
RRC A сдвиг вправо через перенос;
Группа команд операций с битами.
В качестве операндов могут выступать отдельные биты некоторых регистров специальных функций и портов, а также 128 программных флагов пользователя.
CPL C –( C )¬0; CLR bit –( C )¬0 ; SETB C –( C )¬1; SETB bit –( C )¬1;
CPL C –( C )¬not ( C ); CPL bit –( b )¬not (b); ANL C,bit –( C )¬( C )AND(b); ANL C,/bit –( C )¬( C )AND(b);
ORL C,bit –( C )¬ ( C )or(b); ORL C,/bit –( C )¬ ( C )or( b);
MOV C,bit –( C )¬(b); MOV bit,C –( b )¬( C );
Группа команд передачи управления.
Команды, обеспечивающие условное и безусловное ветвление, вызов подпрограммы и возврат из них, а также NOP. Длинный переход - переход по всему адресному пространству ПП (ad16). Содержат в мнемонике L. Абсолютный переход - переход в пределах одной страницы памяти (2048 байт) (ad11). Содержат в мнемокоде А. Относительный переход - переход в пределах - -128 .. +128 байт относительно байта следующей команды. Косвенный переход
JMP @A+DPTR - переход по вычесленному адресу, неизвестному при написании программы –(PC)¬(A)+DPTR.
LJMP ad16 –(PC)¬ad16; AJMP ad11 –(PC)¬(PC)+2,(PC0-10)¬ad11 ; SJMP rel –(PC)¬(PC)+2;(PC)¬(PC)+rel;
JZ rel - переход если А=0; JNZ rel - переход если А¹0; JC rel - переход если С=1; JNC rel - переход если С=0;
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 – переход, если (b)=1, (b)¬0; DJNZ Rn,rel – декремент Rn и переход, если не 0;
DJNZ ad,rel – декремент ad и переход, если не 0;
CJNE A,ad, rel - сравнение АСС и ad и переход если ¹;
CJNE A,#d,rel - сравнение АСС и #d и переход если ¹;
CJNE Rn,#d,rel - сравнение регистра и #d и переход если ¹;
CJNE @R,#d,rel - сравнение байта в РПД и #d и переход если ¹;
LCALL ad16 - длинный вызов подпрограммы;
ACALL ad11 - абсолютный вызов подпрограммы;
RET - возврат из подпрограммы ;
RETI - возврат из подпрограммы обработки прерывания.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.