- •13.1. Классификация микропроцессоров и особенности их использования в цифровой аппаратуре.
- •13.2. Типовые структуры микропроцессорных систем.
- •13.3. Принцип программного управления в микропроцессорной системе.
- •13.4. Организация ввода-вывода в микропроцессорной системе.
- •13.5. Интерфейсы микропроцессорных систем.
- •13.5.1. Интерфейс rs-232.
- •13.5.2. Интерфейс usb.
- •13.5.3. Интерфейс i2c.
- •13.5.4. Интерфейс spi.
- •13.6. Управляющие сигналы типового микропроцессора.
- •13.7. Структура типового микропроцессора.
- •13.8. Способы адресации данных.
- •13.9. Типовая система команд микропроцессора.
- •13.9.1. Команды пересылки данных.
- •13.9.2. Команды выполнения арифметических операций.
- •13.9.3. Команды выполнения логических операций.
- •13.9.4. Команды передачи управления.
- •13.9.5. Команды специальные.
13.9. Типовая система команд микропроцессора.
Поскольку микропроцессор воспринимает только двоичную форму информации, то команды должны быть представлены в виде двоичных кодов. Такая форма представления команд называется машинным языком или машинным кодом. Для человека машинные коды из нулей и единиц неудобны, поскольку их трудно запомнить и отождествить с фактическим назначением команды, а в самих машинных кодах легко перепутать 0 и 1. Для более краткой записи двоичных чисел используются также восьмеричная и шестнадцатеричная формы представления информации. Однако и в этом случае остается нерешенной основная проблема - что означает каждая команда, выраженная в подобной форме. По этой причине при описании команд используются условные обозначения в виде мнемонических названий. Мнемоническое название (мнемоника) команды представляет собой сокращение от английских слов, описывающих операцию, выполняемую командой. Мнемонический код команды позволяет легче запомнить ее функцию и значительно упрощает написание программ. Например, команда возврата из подпрограммы по которой хранящийся в стеке адрес возврата пересылается обратно в счетчик команд, имеет обозначение RET (от return – вернуться).
Каждый микропроцессор характеризуется своей системой команд. Система команд - это полный перечень тех операций, которые способен производить микропроцессор. Управляемый этими командами микропроцессор выполняет очень простые действия, такие, как элементарные арифметические и логические операции, операции пересылки данных, сравнения двух величин и другие. Однако, составив программу из последовательности таких команд, можно запрограммировать выполнение алгоритма любой сложности. Обычно все команды в системе команд объединяются в группы по функциональному назначению. Например, выделяют команды пересылки кодов, команды логических и арифметических действий, команды передачи управления и ряд команд других групп.
Условное обозначение команды помимо мнемоники может также включать названия регистров r или регистровых пар rp, если их наличие предусмотрено типом микропроцессора. При описании системы команд будем придерживаться принципа обобщенности изложения материала и автономности мнемоник и условных обозначений. Это значит, что представленные в данном разделе команды и их мнемоники абстрагированы от какого-либо конкретного микропроцессора, а отражают общие принципы построения систем команд большинства микропроцессоров и микроконтроллеров. Отметим лишь то, что приведенные в качестве примера команды в большей степени характерны для восьмиразрядных микропроцессоров и микроконтроллеров с аккумуляторной архитектурой. Это значит, что в большинстве команд для сохранения результата используется аккумулятор. Также он используется и в качестве источника одного из операндов арифметических или логических команд.
Воспользуемся для примера гипотетическими, не привязанными к конкретному типу микропроцессора, обозначениями регистров - аккумулятором А и регистрами общего назначения В и С. Безусловно, в реальных микропроцессорах количество регистров общего назначения может быть значительно больше и они могут иметь иные обозначения. Будем считать, что восьмиразрядные регистры B и C могут объединяться в шестнадцатиразрядную регистровую пару BC. Эта же регистровая пара будет выполнять функцию указателя адреса данных при косвенной адресации. При описании системы команд восьмиразрядный операнд будем условно обозначать data, а шестнадцатиразрядный операнд – data16. Номер (адрес) порта обозначим как port, а адрес ячейки памяти – как addr. При использовании команд в программе вместо обозначений data, data16, port и addr должны быть подставлены конкретные числовые значения операндов и адресов.
При разборе примеров команд будем, кроме введенных гипотетических аккумулятора А и регистров общего назначения В и С, пользоваться обозначением внешнего регистра M, организованного в памяти. Иными словами будем рассматривать регистр М как косвенно адресуемую ячейку памяти, адрес которой определяется содержимым регистра-указателя адреса при косвенной адресации. В нашем случае роль такого адресного регистра будет выполнять регистровая пара BC.
Кроме самих мнемонических обозначений команд в системе команд указываются обычно машинные коды для каждой команды и время их выполнения либо в тактах, либо в машинных циклах, если длина всех машинных циклов микропроцессора одинакова. Следует отметить, что передача данных как между внутренними регистрами микропроцессора, так и между микропроцессором и периферийными модулями всегда осуществляется с сохранением содержимого источника информации. Для удобства сведем все рассматриваемые команды в таблицу 13.1.
Наряду с описанными выше условными обозначений приведем прочие обозначения, используемые при описании нашей системы команд:
SP - указатель стека;
PC - счетчик команд;
ЯП – ячейка памяти;
( ) - содержимое регистра (регистровой пары), указанного внутри скобок;
[ ] - содержимое ячейки памяти (порта), адрес которой указан внутри скобок;
- направление передачи;
, , - логическии операции “ИЛИ”, “И”, “ИСКЛЮЧАЮЩЕЕ ИЛИ” соответственно;
-CON - обобщенное обозначение, заменяемое на мнемонику условия перехода. Договоримся использовать следующие мнемонические обозначения этих условий: NZ (no zero) - ненулевой результат (флаг ZF=0); Z (zero) - нулевой результат (флаг ZF=1); NC (no carry) - отсутствие переноса (флаг CF=0); C (carry) - наличие переноса (флаг СF=1); PO (parity odd) - нечетное число единиц в коде результата (флаг PF=0); PE (parity even) - четное число единиц в коде результата (флаг PF=1); P (plus) - неотрицательный результат (флаг SF=0); M (minus) - отрицательный результат (флаг SF=1).
Таблица 13.1. Типовая система команд.
Группа команд |
Условное бозначение |
Описание команды |
Команды пересылки Данных |
1. MOV r1,r2 |
(r1) (r2) |
2. MOV r,M |
(r) [BC] | |
3. MOV M,r |
[BC] (r) | |
4. LDI r,data |
(r) КОНСТАНТА | |
5. LDI M,data |
[BC] КОНСТАНТА | |
6. LDRP rp,data16 |
(rp) КОНСТАНТА | |
7. LDS A,addr |
(A) [АДРЕС ЯП] | |
8. LDX A,rp |
(A) [РЕГ.ПАРА] | |
9. STS addr,A |
[АДРЕС ЯП] (A) | |
10. STX rp,A |
[РЕГ.ПАРА] (A) | |
11. PUSH r |
[SP] (r) | |
12. POP r |
(r) [SP] | |
13. IN A,port |
(A) [АДРЕС ПОРТА] | |
14. OUT port,A |
[АДРЕС ПОРТА] (A) | |
Команды выполнения арифметических операций |
1. ADD A,r |
(A) (A) + (r) |
2. ADC A,r |
(A) (A) + (r) + (СF) | |
3. ADD A,M |
(A) (A) + [BC] | |
4. ADC A,M |
(A) (A) + [BC] + (СF) | |
5. ADDI A,data |
(A) (A) + КОНСТАНТА | |
6. ADCI A,data |
(A) (A) + КОНСТАНТА + (СF) | |
7. SUB A,r |
(A) (A) - (r) | |
8. SBC A,r |
(A) (A) - (r) - (СF) | |
9. SUB A,M |
(A) (A) – [BC] | |
10. SBC A,M |
(A) (A) – [BC] - (СF) | |
11. SUBI A,data |
(A) (A) – КОНСТАНТА | |
12. SBCI A,data |
(A) (A) – КОНСТАНТА - (СF) | |
13. MUL A,B |
(B)15-8 (А)7-0 (А) х (B) | |
14. DIV A,B |
(A)15-8 (B)7-0 (А) / (B) | |
15. DA A |
Десятичная коррекция сложения | |
16. INC r |
(r) (r) + 1 | |
17. DEC r |
(r) (r) – 1 | |
18. INC M |
[BC] [BC] + 1 | |
19. DEC M |
[BC] [BC] – 1 | |
20. INRP rp |
(rp) (rp) + 1 | |
21. DCRP rp |
(rp) (rp) – 1 | |
Команды выполнения логических операций |
1. AND A,r |
(A) (A) (r) |
2. AND A,M |
(A) (A) [BC] | |
3. ANDI A,data |
(A) (A) КОНСТАНТА | |
4. OR A,r |
(A) (A) (r) | |
5. OR A,M |
(A) (A) [BC] | |
6. ORI A,data |
(A) (A) КОНСТАНТА | |
7. XOR A,r |
(A) (A) (r) | |
8. XOR A,M |
(A) (A) [BC] | |
9. XORI A,data |
(A) (A) КОНСТАНТА | |
10. CMP A,r |
(A) – (r) | |
11. CMP A,M |
(A) – [BC] | |
12. CMPI A,data |
(A) – КОНСТАНТА | |
13. CM A |
(A) () | |
14. RLC A |
(ai+1) (ai) (a0) (CF) (CF) (an) | |
15. RRC A |
(ai) (ai+1) (an) (CF) (CF) (a0) | |
16. RAL A |
(ai+1) (ai) (a0) (an) (CF) (an) | |
17. RAR A |
(ai) (ai+1) (an) (a0) (CF) (a0) | |
18. SAL A |
(ai+1) (ai) (a0) 0 (CF) (an) | |
19. SAR A |
(ai) (ai+1) (an) (an) (CF) (a0) | |
Команды передачи управления |
1. JMP addr |
(PC) АДРЕС ПЕРЕХОДА |
2. J-CON addr |
(PC) АДРЕС ПЕРЕХОДА | |
3. CALL addr |
[SP] (PC) (PC) АДРЕС ПОДПРОГРАММЫ | |
4. RET |
(PC) [SP] | |
Команды специальные |
1. EI |
Разрешить прерывание |
2. DI |
Запретить прерывание | |
3. NOP |
(PC) (PC) + 1 | |
4. HLT |
Останов |