Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы управления.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
7.35 Mб
Скачать

4.2.2 Система команд

По функциональному признаку все команды могут быть разби­ты на пять групп: команды пересылки данных, логические команды, арифметические команды, команды переходов, команды работы со стеком, ввода-вывода и управления МП.

Список основных команд приведен в таблице 7. Полный список команд можно найти в специальной литературе.

Таблица 7 – Список основных команд

Группа команд

Мнемокод команд

Восьмеричный код команды

Содержание команды

Число байт

Признаки результата операций

Z

S

P

C

AC

Команды пересылки

MOV D,S

1DS

(D)(S)

1

-

-

-

-

-

MVI D,d

0D6

(D1)d

2

-

-

-

-

-

LXI rp, d

0D11

(D1)D

3

-

-

-

-

-

LDA a

072

(A) (a)

3

-

-

-

-

-

STA a

062

(a) (A)

3

-

-

-

-

-

LHLD a

052

L(a), H(a+1)

3

-

-

-

-

-

SHLD a

042

(a)L, (a+1) (H)

3

-

-

-

-

-

LDAX rp

0D22

A(rp)

1

-

-

-

-

-

STAX rp

0D23

((rp))A

1

-

-

-

-

-

XCHG

353

(H)<->(D), (L)<->(E)

1

-

-

-

-

-

Арифметические команды

ADD S

20S

(A) (A)+(S)

1

+

+

+

+

+

ADI d

306

(A) (A)+d

2

+

+

+

+

+

ADC S

21S

(A) (A)+(S)+(C)

1

+

+

+

+

+

ACI d

316

(A) (A)+d+(C)

2

+

+

+

+

+

DAD rp

0D41

(HL) (HL)+(rp)

1

-

-

-

+

-

SUB S

22S

(A) (A)-(S)

1

+

+

+

+

+

SUI d

326

(A) (A)-d

2

+

+

+

+

+

SBB S

23S

(A) (A)-(S)-(C)

1

+

+

+

+

+

SBI d

336

(A) (A)-d-(C)

2

+

+

+

+

+

INR D

0S4

(D) (D)+1

1

+

+

+

+

+

INX rp

0D53

(rp) (rp)+1

1

-

-

-

-

-

DRC D

0D5

(D) (D)-1

1

+

+

+

-

+

DRC rp

0D25

(rp) (rp)-1

1

-

-

-

-

-

DAA

047

Десятичная коррекция

1

+

+

+

+

+

Продолжение таблицы 7

Группа команд

Мнемокод команд

Восьмеричный код команды

Содержание команды

Число байт

Признаки результата операций

Z

S

P

C

AC

Логические команды

ANA S

24S

(A)(A)^(S)

1

+

+

+

0

+

ANI d

346

(A)(A)^d

2

+

+

+

0

+

XRA S

25S

(A)(A)(S)

1

+

+

+

0

0

XRI d

356

(A)(A) d

2

+

+

+

0

0

ORA S

26S

(A)(A)V(S)

1

+

+

+

0

0

ORI d

366

(A)(A)Vd

2

+

+

+

0

0

CMP s

27S

(A)-(S)

1

+

+

+

+

+

CMI d

376

(A)-d

2

+

+

+

+

+

RLC

007

(An+1) (An),

(A0) (A7), (C) (A7)

1

-

-

-

+

-

RRC

017

(An+1) (An),

(AT) (A0)

1

-

-

-

+

-

RAL

027

(An) (An+1),

(C) (A7), (A0) (C),

1

-

-

-

+

-

RAR

037

(An+1) (An),

(C) (A0), (A7) (C),

1

-

-

-

+

-

STC

067

(C) 1

1

-

-

-

1

-

CMC

077

(C) (OC)

1

-

-

-

+

-

CMA

057

(A) (OA)

1

-

-

-

-

-

Команды переходов

JMP a

303

(PC) a

3

-

-

-

-

-

Jc a

332

(PC) a, если условие ССС в поле С истинно

3

-

-

-

-

-

CALL a

315

(РС) а

3

-

-

-

-

-

Cc a

334

(РС) а, если условие ССС в поле С истинно

3

-

-

-

-

-

RET

311

Возврат из подпрограммы

1

-

-

-

-

-

Rc

330

Возврат из одпрограммы, если условие ССС в поле С истинно

1

-

-

-

-

-

PCHL

351

(PC) (H,L)

1

-

-

-

-

-

RST n

3n7

Команда повторного старта

1

-

-

-

-

-

Команды ввода-вывода

IN P

333

(A) (P)

2

-

-

-

-

-

OUT P

323

(P) (A)

2

-

-

-

-

-

PUSH rp

3D65

((SP)) (rp)

1

-

-

-

-

-

PUSH PSW

365

((SP)) (A) u (Z,S,P,C,AC)

1

-

-

-

-

-

POP rp

3D61

(rp) ((SP))

1

-

-

-

-

-

POP PSW

361

(Z,S,P,C,AC) u

(A) ((SP))

1

+

+

+

+

+

XTHL

343

(HL)<->((SP))

1

-

-

-

-

-

SPHL

371

(SP)<->(HL)

1

-

-

-

-

-

E1

373

Разрешение прерывания

1

-

-

-

-

-

D1

363

Запрещение прерывания

1

-

-

-

-

-

HLT

166

Остановка

1

-

-

-

-

-

NOP

000

Нет операции

1

-

-

-

-

-

В таблице 7 приняты следующие обозначения:

rp – регистровая пара;

S – регистр-источник (source);

D – регистр-приемник (destination). Если на позиции S или D стоит 0,1,2,3,4, 5,6,7, то регистрами являются РОН В, С, D, Е, Н, L и М, А соответственно, где М – регистр в памяти (memory), A – аккуму­лятор;

d – (data) - восьми или шестнадцатибитное данное;

а – (address) - шестнадцатибитный адрес памяти;

(...) – содержимое ячейки памяти РОН МП;

(SP) – содержимое указателя стековой памяти;

((SP)) – содержимое ячейки стековой памяти;

D1 = 0, 2, 4, 6 для соответственных регистров РОН В, D, Н, SP;

D2 = 1, 3 для пар регистров ВС, DE;

D3 = 0, 2 для пар регистров ВС, DE;

D4 = 1, 3, 5, 7 для пар регистров ВС, DE, HL, SP;

D5 = 0, 2, 4, 6 для регистров В, D, Н, HL;

D6 = 0, 2, 4 для пар регистров ВС, DE, HL;

n – номер команды повторного старта, n равно от 0 до 7;

р – (port) - 8-битный адрес ПУ;

С – (condition) - условие;

ССС – трехбитный код признака, используемого в командах передачи (табл.8). Цифры в графе 3, записанные в восьмеричном коде, в программе должны представляться в двоичном коде, т.е. 1=001, 2=010, З=011,…,7=111. Символы V, ^, О,  - логические операции И, ИЛИ, НЕ, исключающее ИЛИ, AC - перенос 1 из младшей тетрады при сложении, «+» - формируется по результату операции, «-» - не изме­няется, «О» -очищается, «1» - устанавливается.

Таблица 8

Код

Признак С

Значение признаков

ССС

000

NZ

Z=0, результат не равен 0

001

Z

Z=1, результат равен 0

010

NC

С=0, нет переноса

Oil

С

С=1, есть перенос

100

РО

Р=0, результат четный

101

РЕ

Р=1, результат нечетный

110

Р

S=0, результат положительный

111

М

S=1, результат отрицательный

Команды пересылки обеспечивают пересылку данных между регистрами или памятью и регистрами, признаков результата не формируют.

Пример 1.

MOV D,S - команда пересылает данные из регистра S - источника в регистр D - приемника.

В качестве S могут выступать следующие РОН: В, С, D, Н, L или аккумулятор А. Формат команды приведен на рисунке 12.

<B1>

0

1

D

D

D

S

S

S

MOV D,S

а)

<B1>

0

1

1

1

0

S

S

S

MOV M,S

KO (M) (S)

в)

Рисунок 14 – Форматы команд MOV D,S, и MOV M,S

Если D и S поставить коды РОН из таблицы 6, получится, например, команда 01 010 001, где 01 – код команды из таблицы 7. (IDS) – 1 в двоичном коде соответствует 01, 010 – код регистра-приемника D, соответствующий РОН D (см. табл. 6), 001 – код регистра источника S, соответствующий РОН С, т.е. восьмеричный код команды 121. Таким образом, по данной команде произойдет пересылка данных из регистра С в регистр D, при этом содержимое С сохраняется.

Пример 2.

MOV MS – команда пересылает данные из регистра S (которым могут быть А, В, С, D, H, L) в ячейку памяти М (код в таблице 6), указанной в регистровой паре HL (рис. 14).

Пример 3.

MOV D,M – команда пересылает данные из ячейки памяти М адрес которой указан в HL, в регистр D, т.е. А и РОН В, С, D, H, L (рисунок 15).

<B1>

0

1

D

D

D

1

1

0

MOV D,M

KO (D) (M)

Рисунок 15 – Формат команды MOV D,M

Арифметические команды служат для выполнения арифметических операций над данными, хранящимися в РОН и ячейках памяти М, при этом она оказывает влияние на состояние признаков ССС (таблица 8), появляющихся в регистрах специального флагового регистра ФР – регистра состояний. Признаки ССС формируются АЛУ.

Пример 1.

ADD S – команда выполняет сложение содержимого регистра S с содержимым регистра-аккумулятора А, результат помещается в А.

В кодах команда записывается как, например, 10 000 001, где 10 000 – код ADD из таблицы 7 (20S) – 2 в двоичной системе соответствует 10, 0 соответствует 000, вместо S стоит 001, т.е. регистр С (рис. 16). Следовательно, при выполнении команды ADD С содержимое С при­бавляется к содержимому А. Восьмеричный код команды – 201.

<B1>

1

0

0

0

0

S

S

S

ADD S

KO (S)

(A)+(S)(A)

Рисунок 16 – Формат команды ADD S

Пример. 2.

SUB S – вычитание (S) из (А) с записью результата в А (рисунок 17).

Команда 10 010 01l в соответствии с кодом из табл. 7 (22S) со­держит 10 0102 = 22 – код вычитания, 011г = 3 (РОН Е), т.е. по команде SUB Е из (А) вычитается (Е). Восьмеричный код 223.

<B1>

1

0

0

1

0

S

S

S

SUB S

KO (S)

(A)-(S)(A)

Рисунок 17 – Формат команды SUB S Пример 3.

SUI2 – вычитание содержимого второго байта В2 из А и поме­щение результата в А (рис. 18). Команда двухбайтовая.

<B1>

1

1

0

1

0

1

1

0

SUI a

KO

(A)-(<B2>)(A)

<B2>

0

0

1

Данные

S

Рисунок 18 – Формат команды SUI а

Логические команды реализуют операции И, ИЛИ, НЕ, исклю­чающее ИЛИ, сдвиги влево и вправо и другие команды с формирова­нием признаков ССС.

Операнды хранятся в РОН или ячейках ОЗУ, результат поме­щается в аккумулятор.

Пример 1.

ANA S – команда выполняет операцию поразрядного логиче­ского И над (S) и (А). Например, команда 10 100 100 поразрядно логи­чески умножает (А) и (H), восьмеричный код для команды ANA H -244(рис. 19).

<B1>

1

0

1

0

0

S

S

S

ANA S

KO (S)

(A) (S)(A)

Рисунок 19 – Формат команды ANA S

Пример 2.

ANI2 выполняет поразрядно операцию И над содержимым вто­рого байта В2 и (А). Команда двухбайтовая, ее код 346, т.е. в двоичной форме 11 100 110(см. рис. 20)

<B1>

1

1

1

0

0

1

1

0

ANI a

KO

(A) (<B2>)(A)

<B2>

0

0

1

Данные

S

Рисунок 20 – Формат команды ANI а

Пример 3.

ORA S аналогична команде ANA S, но выполняет операцию по­разрядного логического ИЛИ, т.е. (A)V(S) (A), код 26S.

Команды переходов служат для организации правильной после­довательности выполнения программы, включают команды условного и безусловного переходов, вызова подпрограммы, возвращения в ос­новную программу и др. Все команды на признаки ССС не влияют. Команды безусловного перехода выполняют специальные операции над содержимым СК. Команды условного перехода обеспечивают ветвления по анализу признаков ССС (табл. 8).

Пример 1.

JMP 2 3 – трехбайтовая команда передачи управления по адре­су, содержащемуся в В2 и ВЗ путем записи содержимого В2 и ВЗ в PC (PC - шестнадцатиразрядный регистр). Код команды 303 (рис. 21).

<B1>

1

1

0

0

0

0

1

1

КО

<B2>

0

0

1

Младшие разряды адреса

S

JMP a

<B3>

0

0

1

Старшие разряды адреса

S

(ВЗ) (В2) -> (PC), где PC - счетчик команд

Рисунок 21 – Формат команды JMP a

Пример 2.

CALL a – команда безусловного перехода к подпрограмме, трех­байтовая (рис. 22). Восемь старших разрядов адреса следующей ко­манды пересылаются в ячейку памяти, адрес которой на один меньше содержимого указателя стека SP. Восемь младших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на два меньше (SP). Содержимое SP уменьшается на два. Управление пе­редается команде, адрес которой расположен в В2 и ВЗ команды CALL:

((SP) - 1)  (РСН);

((SP) - 2)  (PCL);

(SP)  ((SP) - 2);

(PC)  (ВЗ) (В2).

Код команды – 315.

<B1>

1

1

0

0

1

1

0

1

<B2>

0

0

1

Младшие разряды адреса

S

<B3>

0

0

1

Старшие разряды адреса

S

Рисунок 22 – Формат команды CALL a

Пример 3.

RET – однобайтовая команда с кодом 311, по ней содержимое указателя стека увеличивается на два, содержимое ячейки памяти по адресу, хранящемуся в SP, пересылается в СК на место младших восьми разрядов, содержимое ячейки памяти, по адресу на один больше­му, чем содержимое SP, пересылается в СК на место старших восьми разрядов.

(PCL)  (SP);

(РСН)  ((SP) + 1);

(SP)  ((SP) + 2).

Таким образом, возврат в основную программу происходит при обращении к байту команды, следующему за байтом, используемым командой CALL.

Команды управления, ввода-вывода и работы со стеком служат для управления работой МП, портами ввода-вывода и стеком; на флаги ССС влияния не оказывают.

Пример 1.

XTHL меняет содержимое регистра L на содержимое ячейки памяти по адресу, содержащемуся в указателе стека SP, и наоборот. Содержимое РОН Н меняется на содержимое ячейки памяти по адре­су, на один большему, чем (SP) и наоборот. Команда однобайтовая, код -343.

(L) (SP);

(Н) ((SP) + 1).

Пример 2.

IN <B2>, OUT <B2> - двухбайтовые команды, служат для ввода данных от входного порта в А и вывода данных из А в выходной порт, соответственно, имеют коды 333 и 323. Второй байт обеих ко­манд отведен под адрес соответствующего входного и выходного пор­тов (рисунок 23).

<B1>

1

1

0

1

1

0

1

1

IN p

<B2>

0

0

1

Адреса порта

S