Шпаргалки по МПС / MPS_shprots / Вопрос 16
.docСистема команд МК51
Система команд МК51 содержит 111 базовых команд, которые удобно разделить по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами.
Система команд МК51 много мощнее и шире системы команд МК48, так как кроме всех команд МК48 в ее состав входят команды умножения, деления, вычитания, операций над битами, операций со стеком и расширенный набор команд передачи управления. Большинство команд (94) имеют формат один или два байта и выполняются за один или два машинных цикла. При тактовой частоте 2 МГц длительность машинного цикла составляет 1 мкс. Первый байт команды любых типа и формата всегда содержит код операции (КОП). Второй и третий байты содержат либо адреса операндов, либо непосредственные операнды.
Состав операндов МК51 шире, чем МК48, и включает в себя операнды четырех типов: биты, 4-битные цифры, байты и 16-битные слова.
В отличие от МК48, который имеет только три битовых флага, МК51 имеет 128 программно-управляемых флагов пользователя. Имеется также возможность адресации отдельных бит блока регистров специальных функций и портов.
Способы адресации данных. В МК51 используются такие же способы адресации данных, как и в МК48: прямая, непосредственная, косвенная и неявная. Следует отметить, что при косвенном способе адресации РПД в отличие от МК48 используются все восемь бит адресных регистров R0 и R1.
Группа команд пересылки данных
Большую часть команд данной группы (табл. 3.2) составляют команды передачи и обмена байтов. Команды пересылки бит представлены в группе команд битовых операций.
Примеры команд:
- Пересылка в аккумулятор из регистра (MOV A, Rn)
- Пересылка в аккумулятор прямоадресуемого байта (MOV A, ad)
- Пересылка в аккумулятор байта из РДП (MOV A, @Ri)
- Загрузка в аккумулятор константы (MOV A, #d)
и так далее.
Группа команд арифметических операций
Данную группу образуют 24 команды, выполняющие операции сложения, десятичной коррекции, инкремента/декремента байтов. Дополнительно по сравнению с МК48 введены команды вычитания, умножения и деления байтов.
Примеры команд:
- Сложение аккумулятора с регистром (ADD A, Rn)
- Сложение аккумулятора с прямоадресуемым байтом (ADD A, ad)
- Сложение аккумулятора с байтом из РПД (ADD A, @Ri)
- Сложение аккумулятора с константой (ADD A, #d)
- Вычитание из аккумулятора регистра и заема (SUBB A, Rn)
- Инкремент аккумулятора (INC A)
- Декремент аккумулятора (DEC A)
- Умножение аккумуллятора на регистр B (MUL AB)
- Деление аккумулятора на регистр B (DIV AB)
Группа команд логических операций
Данную группу образуют 25 команд (табл. 3.4), реализующих те же логические операции над байтами, что и в МК48. Однако в МК51 значительно расширено число типов операндов, участвующих в операциях.
Примеры команд:
- Логическое И аккумулятора и регистра (ANL A, Rn)
- Логическое ИЛИ аккумулятора и регистра (ORL A, Rn)
- Исключающее ИЛИ аккумулятора и регистра (XRL A, Rn)
- Сброс аккумулятора (CLR A)
- Инверсия аккумулятора (CPL A)
- Сдвиг аккумулятора влево циклически (RL A)
- Сдвиг аккумулятора влево через перенос (RLC A)
- Сдвиг аккумулятора вправо циклически (RR A)
- Сдвиг аккумулятора вправо через перенос (RRC A)
Группа команд операций с битами
Отличительной особенностью данной группы команд (табл. 3.5) является то, что они оперируют с однобитными операндами. В качестве таких операндов могут выступать отдельные биты некоторых регистров специальных функций (РСФ) и портов, а также 128 программных флагов пользователя.
Примеры команд:
- Сброс переноса (CLR C)
- Установка переноса (SETB C)
- Инверсия переноса (CPL C)
и так далее.
Группа команд передачи управления
К данной группе команд (табл. 3.6) относятся команды, обеспечивающие условное и безусловное ветвление, вызов подпрограмм и возврат из них, а также команда пустой операции NOP. В большинстве команд используется прямая адресация, т.е. адрес перехода целиком (или его часть) содержится в самой команде передачи управления. Можно выделить три разновидности команд ветвления по разрядности указываемого адреса перехода.
Примеры команд:
- Переход, если аккумулятор равен нулю (JZ rel)
- Переход, если аккумулятор не равен нулю (JNZ rel)
- Переход, если перенос равен единице (JC rel)
- Переход, если перенос равен нулю (JNC rel)
и так далее.
Бывают следующие виды переходов:
- длинные переходы (переход по всему адресному пространству ПП),
- абсолютные переходы (переход в пределах одной страницы памяти программ),
- относительные (позволяет передать управление в пределах -128 - +127 байт относительно адреса следующей команды),
- косвенные (передача управления по косвенному адресу),
- условные (осуществление ветвления по определенным условиям),
- переход из подпрограммы (используются для возврата из подпрограммы).