Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_mps_lab_4.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
199.17 Кб
Скачать

Мікропроцесорна техніка Лабораторна робота№4

ЛАБОРАТОРНА РОБОТА №4

Програмування МП КР580ВМ80

___________________________________________________________________________

1. Мета роботи

Вивчення команд Асемблера для мікропроцесора КР580ВМ80. Отримання практичних навиків програмування мікропроцесора КР580ВМ80.

2. Короткі теоретичні відомості

2.1 Опис команд, їх класифікація. Склад команди: код операції і операндів.

Мікропроцесор містить 8­-ми розрядну шину даних і 16 - розрядну шина адреси. Шина даних зв'язана з шістьма 8-розрядними регістрами А (акумулятор), В, C, D, E, H, L і 16-розрядними регістрами вказівника стеку SP, регістра адреси ІР, 8-розрядними регістрами тимчасового зберігання W, Z і регістром флагів F. З цієї шини дані можуть передаватись в 8-розрядний регістр коду операції і 16-розрядний програмний лічильник PC. На шину адреси можуть передава­тись сигнали адреси з програмного лічильника і регістрів H, L ( H-регістр старших розрядів адреси, L- регістр молодших розрядів ад­реси). Всі дані і команди, циркулюючі по шинах і поступаючі з прист­роїв оперативної пам'яті і вводу-виводу, представлені в двійковій формі. Але для зручності будемо записувати їх в шістнадцятковій фор­мі. Це відповідає і клавіатурі вводу. Тоді 8-розрядне двійкове число може бути представлене у вигляді 2-розрядного шістнадцяткового числа.

Наприклад, двійкове число 11000101 будемо записувати, як С5. Відповід­ність між 4-розрядними двійковими і шістнадцятковими числами пока­зана в табл. 2.1.

Таблиця 2.1.

Двійкове число

10-ве число

16-ве число

Двійкове число

10-ве число

16-ве число

0000

0

0

1000

8

8

0001

1

1

1001

9

9

0010

2

2

1010

10

А

0011

3

3

1011

11

В

0100

4

4

1100

12

С

0101

5

5

1101

13

D

0110

6

6

1110

14

E

0111

7

7

1111

15

F

У відповідності до табл. 2.1. шістнадцятковому числу С5 відпо­відає десяткове число 12*16+5=197. Але навіть в такому вигляді команди запам'ятати дуже важко, тому частіше їх записують скороченими англійськими словами. Такий запис складає мову низького рівня ­Асемблер. Переклад з Асемблера в двійкові коди може виконуватись вручну (по таблиці) або спеціальним транслятором, який є в більшос­ті ЕОМ. Використання мови Асемблер дозволяє значно зменшити залеж­ність програми від типу мікропроцесора, так як при переході на ін­ший мікропроцесор змінюється лише таблиця відповідності.

Всі команди мікропроцесора КР 580 ВМ 80 діляться на 5 груп:

  1. команди пересилки даних. Здійснюють пересилання даних між регістрами або між пам'яттю і регістрами;

  2. арифметичні команди. Призначені для додавання, віднімання збільшення або зменшення вмісту регістрів;

  3. логічні команди. Виконують логічні операції І, АБО, виклю­чаюче АБО, порівняння, зсуву, доповнення даних в регістрах і комірках пам'яті;

  4. команди переходів (умовних і безумовних), виклику підпрограм і повернення з підпрограм;

  5. команди вводу-виводу, управління і роботи зі СТЕКом. Приз­начені для виконання операцій вводу-виводу, роботи зі СТЕКом, керу­вання, дозволу і заборони переривань.

Будь-яка команда виконується за час, який називається циклом команди, що реалізується за 1-5 машинних циклів. Під машинним цик­лом будемо розуміти час, який потрібний для обміну одним словом по інформаційній шині або виконання команди, яка визначаться одним машинним словом. Машинний цикл може складатись з 3-5 машинних тактів в залежності від складності виконуваної команди.

Код виконуваної команди надходить в регістр команди по інформаційній шині, і пристрій управління у відповідності з записаним ко­дом формує керуючі сигнали на внутрішні і зовнішні блоки МП.

2.2 Класифікація та призначення регістрів загального призначення.

Для запам'ятовування двійкового числа при виконанні арифметичних і логічних операцій над ними служить пристрій, який називається регістром. Регістр складеться із зв'язаних між собою тригерів, кількість яких рівна кількості розрядів у запам'ятовуваній команді (приклад - ADDB, SUBC ) або числі. Всі тригери регістру знаходяться під дією загальних сигналів управ­ління. З допомогою регістрів виконуються такі дії над числами, як запис їх з одного пристрою і передача на інший, зсув числа в сторону старших чи молодших розрядів на потрібну кількість розрядів, зберігання чисел і інше. В регістрі пам'яті число може зберігатись певний проміжок часу і неодноразово зчитуватись при передачі відповідної команди.

МП КР 580 ВМ 80 містить шість 8-розрядних регістрів загального призначення (B, C, D, E, H, L) які можуть використовуватись і як три 16-розрядні регістри (BC, DE, HL). Регістри B, C, D, E, H, L використовуються для зберігання даних. ре­гістри H, L можуть використовуватись також як адресний регістр.

2.3 Способи адресації.

В МП використовують три способи адресації:

  1. пряма - адреса операнду (операндів) міститься в самій команді;

  2. безпосередня - операнди задаються в другому або в третьому байтах команди (LDA 8052, CALL 3050, JMP 8001);

  3. непряма - адреса операнду зберігається в парі регістрів за­гального призначення (РЗП) H, L, які ще називаються регістром непрямої адресації (SUBM, ADDM).

Завантаження регістрів H, L здійснюється за допомогою безпосередньої адресації (LХІ H, 8102). Адреса даних формується в регістрі адреси (ІP) і видається на адресну магістраль (ША) через 16-розрядний буферний регістр адреси (БА)

Адреса в ІP формується:

-коли ІP під'єднується до лічильника команд (РС), вміст якого збільшується на 1 після зчитування кожного байта команди;

-коли адреса вводиться послідовно по одному байту і спочатку розміщується в програмно недоступних регістрах тимчасового збері­гання (W,Z), а потім передається в РА;

-при прямій та безпосередній адресації адреса розміщується в W, Z, а при непрямій - в регістрах загального призначення H, L.

Команди пересилки даних здійснюють обмін даними між регістрами чи між регістрами і пам'яттю. Основні команди цієї групи мають поз­начення MOV чи MVІ. По команді MOV проходить пересилання вмісту одного регістру в пам'ять, чи вмісту пам'яті в регістр. Наприклад, по команді MOV B, H проходить передача числа з регістру H в регістр В.

По команді MVІ здійснюється запис числа в акумулятор, регістр чи пам'ять. Наприклад, команда MVІ B, 35 дозволяє записати число 35 (в шістнадцятковому коді) в регістр В.

При записі на Асемблері акумулятор позначається буквою А, оперативно запам'ятовуючий пристрій - М. Шістнадцяткові коди деяких команд пересилки даних приведені в табл.2.2

Таблиця 2.2

Асемблер

16-ковий код

Асемблер

16-ковий код

MOV A,A

7F

MOV M,A

78

MOV M,B

77

MOV A,B

70

MOV A,C

79

MOV M,C

71

MOV A,D

7A

MOV A,M

7E

MOV B,A

47

MOV B,M

46

MOV B,B

40

MOV C,M

4E

MOV B,C

41

MVІ A, число

3E+число

MOV C,A

4F

MVІ B, число

06+число

MOV C,B

48

MVІ C, число

OE+число

MOV C,C

49

MOVD,A

57

Команди пересилки даних регістр-регістр займають в оперативній пам'яті одну комірку (1 байт, одне двохрозрядне шістнадцяткове чис­ло). Команди для роботи з пам'яттю MOV M, A, MOV A,М і інші е коман­дами з другорядною адресацією. В оперативній пам'яті буде вибира­тись комірка, адреса якої знаходиться в регістрах Н-старші розряди і L-молодші розряди.

Так, якщо в регістрі Н знаходиться число 82, а в регістрі L­ число 16, то по команді MOV A,M в регістр А буде записано число з адресою 8216. Такі команди також е однобайтними. Але для точності адресації комірки пам'яті 8216 може бути використана команда LDA 8216, яка займає три послідовних байти пам'яті, в яких розміщені числа 3А, 16, 82. 3А- код команди, 16 - молодші розряди адреси, 82 - старші розряди адреси. Аналогічна команда STA 8216, по якій вміст акумулятора передається в комірку з адресою 8216. і, на кінець, ко­манда MVІ A 27 дозволяє точно записати число 27 в акумулятор. Ця команда займає 2 байти пам'яті , в яких розміщені числа 3Е, 27. Але потрібно пам'ятати, що число 27 записане в шістнадцятковій системі. В десятковій системі це буде число 2*16+7=39. Виконання кожної ко­манди (командний цикл) займає від одного до п'яти машинних циклів тривалістю 2 мкс кожний. Машинний цикл потрібен кожен раз, коли мік­ропроцесор звертається до пам'яті, пристроям вводу-виводу (портів).

Якщо команда займає декілька байтів, то для вибору кожного байту потрібно по одному машинному циклу.

Так, команда MOV C,A займає один машинний цикл і виконується в такій послідовності:

1). Нехай ця команда записана в комірці пам'яті 8200, тоді в цій комірці буде зберігатись код 4F. Виконання команди починається, якщо до початку командного циклу на програмному лічильнику е число 8200. Вміст програмного лічильника по шині адреси передасть адресу 8200 в блок пам'яті, а по шині управління передається сигнал читання.

Вміст комірки з адресою 8200 (4F) передається по шині даних в регістр коду операції, після чого виконується дешифрація коду операції і виконується операція з шістнадцятковим кодом 4F. По цій ко­манді вміст акумулятора передається на шину даних і з неї в регістр С.

На цьому виконання команди закінчується і до вмісту командного лічильника додається одиниця.

2). Виконання команди LDA 8216, яка займає три комірки пам'яті, наприклад 8201, 8202, 8202, в яких зберігаються коди 4F, 16, 82, починається, коли на програмному лічильнику е число 8201. На адресі 8201 вибирається команда 4F. В другому машинному циклі з наступної комірки 8202 вибирається число 16 і записується в регістр L. В третьому машинному циклі з комірки 8203 вибирається число 82 і записується в регістр Н. В четвертому машинному циклі вміст регістрів H, L передається в шину адреси і формується сигнал зчитування. Число з комірки 8216 в четвертому машинному циклі передається в акуму­лятор. На програмному лічильнику встановлюється число 8204, інші команди виконуються аналогічно.

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

Стек (область ОЗП) організований таким чином:

- заповнення стеку відбувається знизу вверх;

- вибирається стек в зворотньому напрямку (рис.1);

Вказівник стеку (SP) зберігає адресу останньої зайнятої комірки ("вершини") стеку. Команди, що використовують стек, переносять два байти (наприклад, вміст пари регістрів H,L) таким чином, що вміст старшого регістру Н (hіgh) розміщується за адресою AS-1 (AS ­початковий код адреси, що міститься в SP до моменту пересилання), а молодшого L (low) - за адресою AS-2 (рис.3).Під час вибірки двох байтів спочатку вибирається молодший байт (AS-2), а потім за адресою на одиницю більшу (AS-1) старший. Вміст SР при цьому збільшується на два. В момент переривання основної програми після завершення виконання мікропроцесором поточної коман­ди в стек автоматично завантажується вміст лічильника команд, а в лічильник команд завантажується адреса першої команди підпрограми. Після закінчення наступної переривання в лічильник команд поверта­ються із стеку значення наступної до переривання команди основної програми (адреса повертання). Арифметичні команди призначені для виконання додавання, віднімання, збільшення або зменшення вмісту регістрів чи комірок пам'яті на одиницю.

Команди додавання і віднімання завжди виконуються між першим числом, яке знаходиться в акумуляторі, і другим числом, яке знахо­диться в регістрі чи в пам'яті. Результат розміщується в акумулято­рі. Команди ADDR ( де R- будь-який регістр) додають вміст акумуля­тора і регістра, команди SUBR віднімають від вмісту акумулятора вміст регістра, команди ІNR R збільшують вміст регістра на одиницю, команди DCR R зменшують вміст регістра на одиницю. Всі ці команди команди допускають адресацію, як і команди пересилки.

Шістнадцяткові коди деяких арифметичних команд приведені в табл 2.3.

Таблиця 2.3.

Асемблер

16-овий код

Асемблер

16-овий код

ADD A

87

ІNR A

3C

ADD B

80

ІNR B

04

ADD C

81

ІNR M

0C

ADD M

86

ІNR C

34

SUB A

97

DCR A

3D

SUB B

90

DCR B

05

SUB C

91

DCR C

0D

SUB M

96

DCR M

35

При виконанні всіх вказаних команд, якщо результат рівний ну­лю, тригер флага нуля (флаг Z) встановлюється в стан "1",результат не рівний нулю - в стан "0".

При виконанні операції ADD R і ІNR R, якщо відбувається пере­повнення, встановлюється флаг переносу (флаг С), при відніманні, якщо вміст акумулятора менший вмісту регістра - флаг S. Ви­користання флагів відбувається звичайно при виконанні операції умовного переходу.

2.4. Логічні команди.

Виконують логічні операції над даними, які зберігаються в ре­гістрах і комірках пам'яті. Основними логічними операціями e І, АБО, виключаючи АБО, порівняння CMR R робить порівняння вмісту аку­мулятора з вмістом регістра, комірки пам'яті (непряма адресація) і самим числом. Деякі команди порівняння приведені в табл. 2.4.

Таблиця 2.4.

Асемблер

16-ковий код

Примітка

CMP A

BF

При рівності чисел

які порівнюються,

встановлюється флаг Z

CMP B

B8

CMP C

B9

CMP M

BE

CPІ, число

FE + число

2.5. Команди безумовного переходу.

Змінюють нормальну послідовність виконання команд. Коман­да безумовного переходу JМP, "адреса" завжди встановлюється в прог­рамний лічильник число, записане в позиці "адреса". Наступною виконується команда, адреса якої в блоці пам'яті відповідає числу в позиції "адреса". Команда умовного переходу передає управління ко­манді, вказаної в позиції "адреса", тільки при одиничному значенні флага Z. Послідовність команд не змінюється, якщо флаг Z рівний нулю. До цієї ж групи команд відносяться команди виклику підпрограми CALL, "адреса". По цій команді управління передається по вмісту комірки "адреса", адреса останньої виконаної перед нею команди запам’ятовується в стоці і після виконання підпрограми по команді RET виконується повернення до виконання основної програми, наступної за командою CALL.

Регістри H, L можуть використовуватись, як адресний регістр. Деякі команди переходу і їх шістнадцяткові коди приведені в табл. 2. 5.

Існують слідуючі умови переходу:

Умова Код

NZ - не нуль (Z=0) 000

Z - ноль (Z=1) 001

NC - нема переносу

(CY=0) 010

C - e перенос

(CY=1) 011

PO - непарний результат

(P=0) 100

PE - парний результат

(P=1) 101

P - плюс (S=0) 110

M - мінус (S=1) 111

JMP [адр.]

PC -(байт 3) (байт 2)

Керування передається команді, адреса якої вказана на другому і третьому байтах команди переходу.

Таблиця 2.5.

1 1 0 0 0 0 1 1

молодший байт адреси

старший байт адреси

JMP [адр.] C3

Цикли: 3

Стан: 10

Адресація: безпосередня

J (умова) [адр.] (умовний перехід)

Якщо (ССС), то (РС) - (байт 3) (байт 2)

Якщо вказана умова істинна, то управління передається команді, адреса якої вказана на другому і третьому байтах команди переходу.

Якщо умова хибна, то слідуючий код програми не змінюється.

1 1 С С С 0 1 0

молодший байт адреси

старший байт адреси

JNZ [ адр.] C2

JZ [ адр.] CA

JNC [ адр.] D2

JC [ адр.] DA

JPO [ адр.] E2

JPE [ адр.] EA

JP [ адр.] F2

JM [ адр.] FA

Цикли: 3

Стан: 10

Флаги: нема

CALL [ адр.] (ВИКЛИК) ((SP) - 1) -(PCH) ((SP) - 2) - (PCL) (SP) - (SP) - 2

(PC) - (байт 3) (байт 2)

Старші 8 біт адреси наступної команди пересилаються в комірку па­м'яті, адреса якої на 1 менша вмісту вказівника СТЕКУ SP. Мо­лодші 8 біт адреси наступної команди пересилаються в комірку пам'яті адреса якої на 2 менша величини вказівника СТЕКУ SP. Вміст вказі­вника СТЕКУ зменшується на 2. Керування передається команді, адреса якої вказана на другому і третьому байтах команди виклику.

-

1 1 0 0 1 1 0 1

молодший байт адреси

старший байт адреси

­CALL [адр.] CD

Цикли: 5

Стан: 18

Адресація: безпосередня/ непряма регістрова Флаги: нема

С (УМОВА) (адр.) (УМОВНИЙ ВИКЛИК)

Якщо (ССС), то ((SP) - 1) - (PCH)

((SP) - 2) - (PCL), (SP) - (SP) - 2 (PC) - (байт 3) (байт 2)

Якщо вказана умова істинна, то виконуються дії, які описані в команді CALL, в противному випадку послідовність виконання команд не змінються.

-

1 1 С С С 1 0 0

молодший байт адреси

старший байт адреси

CNZ (адр.) C4

CZ (адр.) CC

CNC (адр.) D4

CC (адр.) DC

CPO (адр.) E4

CPE (адр.) EC

CP (адр.) F4

CM (адр.) FC

Цикли: 5

Стан: 18

Адресація: безпосередня/ непряма регістрова Флаги: нема

RET (ПОВЕРНЕННЯ)

(PCL) - ((SP))

(PCH) - ((SP) + 1) (SP) - (SP) + 2

Вміст комірки пам'яті, адреса якої міститься у вказівнику СТЕКУSP, пересилається у 8 молодших біт програмного лічильника.

Вміст вказівника СТЕКУ збільшується на 2.

1100100

RET C9

Цикли: 3

Стан: 10

Адресація: безпосередня регістрова

­Флаги: нема

1 С С С 0 0 0

RNZ CO

RZ C8

RNC DO

RC D8

RPO EO

RPE E8

RP FO

RM F8

Цикли: 3

Стан: 12

Адресація: непряма регістрова

Флаги: нема

RST n (РЕСТАРТ)

((SP) - 1) - (PCH)

((SP) - 2) - ((PCL) (SP) - ((SP) - 2) (PC) - 8 (NNN)

Старші 8 біт адреси наступної команди пересилаються в комірку пам’яті, адреса якої на 1 менше вмістимого вказівника СТЕКУ. Молодші 8 біт адреси наступної команди пересилаються в комірку па­м'яті, адреса якої на 2 менша вмісту вказівника СТЕКУ. Вміст вказівника СТЕКУ зменшується на 2. Керування передається по ко­манді, адреса якої рівна коду NNN, помноженого на 8.

1 N N N 1 1 1

­RST 0 C7

RST 1 CF

RST 2 D7

­RST 3 DF

RST 4 E7

RST 5 EF

RST 6 F7

RST 7 FF

Цикли: 3 Стан: 12

Адресація: непряма регістрова Флаги: нема

15 14 13 12 10 9 8 7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 0 0 N N N 0 0 0 - Програмний лічильник після рестарту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]