Главная страница

0_МПиИСТС_Все главы. Микропроцессоры и интерфейсные средства транспортных средств


Скачать 10.01 Mb.
НазваниеМикропроцессоры и интерфейсные средства транспортных средств
Анкор0_МПиИСТС_Все главы.doc
Дата18.12.2017
Размер10.01 Mb.
Формат файлаdoc
Имя файла0_МПиИСТС_Все главы.doc
ТипУчебное пособие
#11960
страница16 из 47
1   ...   12   13   14   15   16   17   18   19   ...   47

4.4 Классификация команд МП КР580ВМ80А


Ассемблер команд МП КР580ВМ80А содержит 244 команды, которые классифицируются по трем основным признакам:

  • длина команды,

  • функциональное назначение,

  • метод адресации.

По длине команды делятся на однобайтовые, двухбайтовые, трехбайтовые (рис. 4.2).

При этом первый байт команды всегда содержит код операции (операционный код), а второй и третий байты отводятся под данные или адрес.





Рис. 4.2 Классификация команд МП КР580ВМ80А по длине



Метод адресации – это метод определения данных, участвующих в операциях, или иначе говоря, способ определения операндов.

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

Для КР580ВМ80А существуют следующие методы адресации:

  • непосредственная,

  • прямая,

  • регистровая,

  • косвенная.

Непосредственная адресация является наиболее экономичным методом хранения и поиска информации, поскольку необходимые данные содержит сама команда.

Эти данные содержатся во втором и третьем байтах трехбайтовой команды или во втором байте двухбайтовой команды. В случае трехбайтовой команды младшие разряды 16-битового числа содержатся во втором байте команды, а старшие – в третьем (рис. 4.3)





Рис4.3 Непосредственная адресация


Прямая адресация является менее экономичной. В этом случае во втором и третьем байтах команды содержится полный 16-разрядный адрес памяти.

Младшим байтом адреса является <В2>, старшим <В3> (рис. 4.4). Таким образом, можно адресоваться к любой ячейке адресного пространства памяти.




Рис. 4.4 Прямая адресация


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




Рис. 4.6 Регистровая адресация


Косвенная адресация отличается от регистровой тем, что в регистровой паре, определяемой кодом команды, содержатся не данные, а полный 16-разрядный адрес ячейки памяти, в которой находятся эти данные (рис. 4.7).




Рис. 4.7 Косвенная адресация


Старший байт адреса записывается в первом регистре пары, а младший байт – во втором. Обычно указателем адреса при косвенной адресации являются пара регистров HL, но иногда используются пары BС и DE.

По функциональному назначению команды делятся на следующие основные группы:

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

  • арифметические и логические команды,

  • команды переходов,

  • команды работы с подпрограммами,

  • команды управления.


4.5 Команды пересылки (перемещения) данных


Это команды передачи данных в МПС из одного места в другое. К числу областей хранения информации относятся как ячейки памяти, так и регистры. В зависимости от того, какие устройства микропроцессора участвуют в пересылке данных, различают команды: загрузка, пересылка и запись в память. Команды пересылки данных могут быть одно-, двух- или трехбайтовыми. Все команды пересылки, за исключением команды POP PSW не изменяют содержимого регистра признаков. Приращение программного счетчика (PC) равно числу байтов в команде.

4.5.1 Пересылка из регистра в регистр





MOV ri, rj

ri rj



01

ri

rj


По этой команде в регистр ri загружается копия данных, содержащихся в регистре rj. В качестве регистров могут выступать: аккумулятор (А), РОН B,C,D,E,H,L , имеющие свой трехразрядный двоичный код.

Команда выполняется за один цикл, содержащий 5 тактов. В качестве одного из регистров можно выбрать память (M). В этом случае команда выполняется за 2 цикла (7 тактов), при этом данные пересылаются в регистр из ячейки ЗУ с адресом, хранящимся в паре регистров HL , или в обратном направлении.
Примеры:

015A) MOV B, A

По этой команде данные, находящиеся в аккумуляторе/регистр будут переданы в регистр В. После выполнения команды в аккумуляторе и в регистре В содержатся одни и те же данные


Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

015A

47

47

А

DB

DB

В

AF

DB

PC

015A

015B


После выполнения команды содержимое регистра признаков останется без изменения.
016A) MOV M, A


Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

016A

77

77

H

0E

0E

L

AD

AD

A

5B

5B

0EAD

12

5B

PC

016A

016B



4.5.2 Непосредственная пересылка





MVI ri, Данные

ri <B1>

00

ri

110

<B2>

Данные







7

0

По этой команде в регистр ri загружаются данные, которые находятся во втором байте команды. Команда двухбайтовая, выполняется за два машинных цикла (7 тактов). Если в качестве регистра используется память (M), т.е. ri =M ,то данные пересылаются в ячейку памяти [(H)(L)].В этом случай команда выполняется за 3 цикла (10 тактов). При выполнении команды содержимое триггеров признаков не меняется.
Пример:

0148) MVI B, 25

По этой команде данные, находящиеся во втором байте команды (25 Н) загружаются в регистр В, имеющий двоичный код 000.


Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0148

06

06

0149

25

25

В

B5

25

PC

0148

014A



4.5.3 Непосредственная загрузка пары регистров





LXI ri, Данные

ri  < B1>

00

ri

001



ri+1 

Мл. байт данных (7-0)






Ст. байт данных (15-8)







7

0

ri код старшего регистра пары (B, D, H).

При ri = 110: SP  , то есть загружается указатель стека.

По этой команде в 16-разрядную пару регистров BC, DE или HL заносятся данные, содержащиеся во втором и третьем байтах команды, причем данные заносятся соответственно в младший и старший регистры пары. Это 3-х байтовая команда, выполняемая за три цикла (10 тактов). При выполнении команды содержимое триггеров признаков не меняется.
Пример:

0124) LXI H, 48A7

По этой команде данные, находящи­еся во втором байте команды (число А7 Н) будут переданы в регистр L, а число, записанное в третьем байте (48 Н) - в регистр Н. Содержимое ячеек памяти при этом не меняется, как и регистр признаков.


Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0124

21

21

0125

A7

A7

0126

48

48

H

DE

48

L

AD

A7

PC

0124

0127



4.5.4 Запоминание/загрузка аккумулятора и пары HL


а)

STAX B

[(B)(C)]  (A)

00

000

010

б)

STAX D

[(D)(E)]  (A)

00

010

010

в)

LDAX B

(A)  [(B)(C)]

00

001

010

г)

LDAX D

(A)  [(D)(E)]

00

011

010







7




0


По командам группы а) и б) содержимое аккумулятора запоминается в оперативной памяти по адресу, хранимому в паре регистров ВС (а) или DE (б). По командам группы в) и г) содержимое оперативной памяти из ячейки, адресом которой является содержимое пары регистров ВС (в) или DE (г), загружается в аккумулятор.

Команды группы а - г являются однобайтовыми и выполняются за два машинных цикла (7 тактов). Для того, чтобы можно было воспользоваться этими командами, в соответствующую пару регистров необходимо предварительно загрузить нужный адрес.

Примеры:

00B1) STAX D

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

00B1

12

12

А

49

49

D

66

66

E

99

99

6699

E3

49

PC

00B1

00B2

По этой команде содержимое аккумулятора (A)=49H будет скопировано в ячейку памяти с адресом 6699 Н, хранимым в паре регистров DE.
0800) STAX B

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0800

02

02

B

0A

0A

C

11

11

A

82

82

0A11

BE

82

FL

02

02

PC

0800

0801


0801) LDAX B

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0801

0A

0A

B

0A

0A

C

11

11

A

82

BE

0A11

BE

BE

FL

02

02

PC

0801

0802



0802) LDAX D

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0802

1A

1A

D

66

66

E

99

99

6699

E3

E3

A

49

E3

FL

02

02

PC

0802

0803


д)

STA Адрес

[]  (A)

00

110

010






Мл. байт адреса






Ст. байт адреса

е)

LDA Адрес

(A)  []

00

111

010






Мл. байт адреса






Ст. байт адреса







7

0


По командам д) и е) содержимое аккумулятора запоминается в ячейке памяти, адрес которой приводится во втором и третьем байтах команды (д), или содержимое ячейки памяти, адрес которой приводится во втором и третьем байтах команды, передается в аккумулятор (е).

Команды этой группы трехбайтовые, выполняются за 4 цикла (13 тактов).
1F00) STA 0F1C

По этой команде содержимое аккумулятора скопируется в ячейке памяти с адресом 0F1C

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

1F00

32

32

1F01

1C

1C

1F02

0F

0F

0F1C

2A

05

A

05

05

PC

1F00

1F03


После выполнения операции и в ячейке 0F1C и в аккумуляторе будет записано одно и то же число.
0803) LDA 0F1C

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0803

32

32

0804

1C

1C

0805

0F

0F

0F1C

2A

2A

A

05

2A

PC

0803

0806

FL

02

02



ж)

SHLD Адрес

[]  (L)

00

100

010



[+1]  (H)

Мл. байт адреса






Ст. байт адреса

з)

LHLD Адрес

(L)  []

00

101

010




(H)  [+1]

Мл. байт адреса






Ст. байт адреса







7

0


По командам этой группы происходит передача данных из пары регистров HL в две соседние ячейки оперативной памяти (ж) или в обратном направлении (з). 16-разрядный адрес первой ячейки приводится во втором и третьем байтах команды; адрес второй ячейки вычисляется в МП с помощью инкремента (увеличения на единицу) содержимого второго и третьего байтов команды.

Команды этой группы трехбайтовые, выполняются за 5 циклов(16 тактов). При выполнении этих команд содержимое триггеров признаков не изменяется.
0F41) SHLD 32AF

При выполнении этой команды содержимое пары регистров HL будет скопировано в соседних ячейках памяти 32AF и 32B0. При этом содержимое (HL) не изменяется.

Адрес/регистр

Код до выполнения операции

Код после выполнения операции

0F41

22

22

0F42

AF

AF

0F43

32

32

32AF

4B

5D

32B0

8D

3F

H

3F

3F

L

5D

5D

PC

0F41

0F44


0806) LHLD 6AFF

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

0806

2A

2A

0807

FF

FF

0808

6A

6A

H

07

FD

L

AF

33

6AFF

33

33

6B00

FD

FD

FL

02

02

PC

0806

0809

4.5.5 Ввод из пары регистров в стек





PUSH ri



11

ri

101







7




0

ri код старшего регистра пары (B, D, H).

[SP-1] ( ri); [SP-2] (ri+1); SP (SP)-2.

По этой команде содержимое указателя стека (SP) автоматически уменьшается на 1 и в ячейку памяти, адрес которой равен [SP-1]запишется содержимое старшего регистра пары РОН. Затем содержимое указателя стека еще раз уменьшится на 1 и в соседнюю ячейку памяти с адресом [SP-2] запишется содержимое младшего регистра выбранной пары РОН. После второго уменьшения содержимое указателя стека останется без изменения до следующего обращения к нему. Для пар регистров ВС, DE, HL старшими являются регистры В, D, H. Содержимое регистра признаков не меняется. Выполняется за 3 цикла (11 тактов).
Пример:

01BE) PUSH D

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

01BE

D5

D5

SP

0BB0

0BAE

0BAE

00

6E

0BAF

00

12

D

12

12

E

6E

6E

PC

01BE

01BF


080A) PUSH H

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

080A

E5

E5

SP

0BAE

0BAC

0BAC

62

A5

0BAD

01

FC

H

FC

FC

L

A5

A5

FL

02

02

PC

080A

080B



4.5.6 Ввод А и F в стек





PUSH PSW



F5







7

0

[SP-1] (A); [SP-2]  (F); SP  (SP)-2
По этой команде содержимое указателя стека (SP) автоматически уменьшается на 1 и в ячейку памяти с адресом [SP-1] записывается содержимое аккумулятора (А). Затем содержимое указателя стека вновь уменьшается на 1 и является адресом ячейки памяти [SP-2], куда записывается содержимое регистра признаков (F). После этого содержимое указателя стека не меняется до очередного обращения к нему.

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

Команда выполняется за три цикла (11 тактов). При этом содержимое регистра признаков не меняется.

Примеры:
02A1) PUSH PSW

Адрес

Код до выполнения

операции

Код после выполнения

операции

02A1

F5

F5

A

21

21

FL

02

02

SP

FF09

FF07

FF07

XX

02

FF08

XX

21

PC

02A1

02A2


080B) PUSH PSW

Адрес

Код до выполнения операции

Код после выполнения операции

080B

F5

F5

A

A6

A6

FL

82

82

SP

0BAC

0BAA

0BAA

03

82

0BAB

01

A6

PC

080B

080C



4.5.7 Выбор из стека пары регистров





POP ri



11

ri

001







7




0

ri код старшего регистра пары (B, D, H)

ri+1  [(SP)]; ri  [(SP)+1]; SP  (SP)+2

Эта команда по действию обратна команде 2.5. При ее выполнении содержимое ячейки памяти, адрес которой записан в указателе стека (SP), перепишется в младший регистр пары РОН (C, E, L). После этого содержимое указателя стека увеличивается на 1 и из ячейки памяти с полученным адресом переписывается содержимое в старший регистр пары РОН (B, D, H). Затем содержимое указателя стека вновь увеличивается на 1 и остается таким до следующего обращения к нему. Данная команда выполняется за 3 цикла (10 тактов). При ее выполнении содержимое регистра признаков не меняется.
Примеры:

01C9) POP D

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

01C9

D1

D1

SP

0BAE

0BB0

0BAE

6E

6E

0BAF

12

12

D

33

12

E

6D

6E

PC

01C9

01CA


080C) POP B

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

080C

C1

C1

SP

0BAA

0BAC

0BAA

82

82

0BAB

A6

A6

B

11

A6

C

2A

82

PC

080C

080D

FL

02

02



4.5.8 Выбор (A) и (F) из стека





POP PSW



F1







7

0

F [(SP)]; A [(SP)+1]; SP (SP)+2

Действие этой команды противоположно действию команды 4.5.6. Эта команда аналогична команде 4.5.7 и отличается лишь регистрами. Команда выполняется за три цикла (10 тактов). Содержимое регистра признаков изменяется в соответствии с кодом записанного в стеке слова.

Пример:

080D) POP PSW

Адрес/регистр

Код до выполнения

операции

Код после выполнения

операции

080D

F1

F1

SP

0BAC

0BAE

0BAC

02

02

0BAD

18

18

A

11

18

FL

82

02

PC

080D

080E



4.5.9 Обмен данными



а) Обмен между DE и HL .

XCHG

(H) (D) ; (L) (E) <B1>

EB







7

0


б)Обмен вершины стека с HL

XTHL

(L) [(SP)];(H) [(SP) +1]

E3







7 0

По этим командам происходит обмен данными между регистрами D и H, E и L (а) или между регистрами и ячейками памяти (б), адреса которых выбираются из регистра SP (указателя стека). Команды однобайтовые и выполняются за 1 или 5 циклов (4 или 13 тактов) соответственно для команд a) и б). После выполнения команды содержимое регистра признаков не изменяется.
Примеры:
00D1) XTHL

Адрес/ регистр

Код до выполнения операции

Код после выполнения операции

00D1

E3

E3

L

2A

5A

H

48

0C

SP

12B2

12B2

12B2

5A

2A

12B3

0C

48

PC

00D1

00D2

После выполнения операции содержимое указателя стека остается таким же, как и до выполнения операции.
080E) XCHG

Адрес/ регистр

Код до выполнения операции

Код после выполнения операции

080E

EB

EB

D

05

77

E

FA

2B

H

77

05

L

2B

FA

FL

02

02

PC

080E

080F



4.5.10 Пересылка НL


а) Пересылка в указатель стека

SPHL

(SP)(H) (L)

F9







7 0

б) Пересылка в счетчик команд

PCHL

(PC)(H) (L)

E9







7 0

При выполнении этих команд содержимое регистровой пары HL передается в регистр SP - указатель стека (а) или в регистр PC - счетчик команд (б). При этом старший байт принимается из регистра Н, а младший - из регистра L. Содержимое регистров Н и L при выполнении команды не изменяется. Не изменяется также содержимое регистра признаков F. Команда выполняется за один цикл (5 тактов).
Примеры:
080F) SPHL

Адрес/ регистр

Код до выполнения операции

Код после выполнения операции

080F

F9

F9

SP

0BB0

0BAC

H

0B

0B

L

AC

AC

FL

02

02

PC

080F

0810


0810) PCHL

Адрес/ регистр

Код до выполнения операции

Код после выполнения операции

0810

E9

E9

PC

0810

09AE

H

09

09

L

AE

AE

FL

02

02



1   ...   12   13   14   15   16   17   18   19   ...   47


написать администратору сайта