Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ікропроцесорна техніка Лабораторна робота№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 груп:
Код виконуваної команди надходить в регістр команди по інформаційній шині, і пристрій управління у відповідності з записаним кодом формує керуючі сигнали на внутрішні і зовнішні блоки МП.
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 Способи адресації.
В МП використовують три способи адресації:
Завантаження регістрів 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
Стан: 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 - Програмний лічильник після рестарту.
3. Завдання
1.Виконується на самостійній підготовці перед виконанням дослідної роботи.
1.1.Скласти програму для виконання за прикладом 1 таких тотожностей:
1.Y=X1+35-2*X2
2.Y=2*X2+4*X1+7
3.Y=X2+3*X1-15
4.Y=X1-X2-40
5.Y=4*X1-3*X2+16
Значення чисел Х1,Х2 подані в таблиці 1 для вказаного викладачем варіанту (числа десяткові).
Таблиця 1
Числа |
ВАРІАНТИ |
||||
1 |
2 |
3 |
4 |
5 |
|
Х1 |
15;9 |
41;26 |
99;80 |
65;30 |
50;2 |
X2 |
21;11 |
39;14 |
66;75 |
45;15 |
29;2 |
4.Виконується в лабораторії
Приклад 1
Вирахувати Y=3*(X1-4+X2).Результат записати в комірку памяті за адресою 8052. Число Х2 зберігається в комірці 8051 , число Х1 - в комірці 8052.
Необхідно памятати, що при записі адреси в машинному коді молодший байт вводиться другим байтом ,а старший-третім байтом команди.
Асемблер Машинний код
LDA 80 52 3А 52 80
1 байт 2 байт 3 байт 1 байт 2 байт 3 байт
де 52-молодший байт
80-старший байт
Приклад 2
Адреса |
Машинний код |
Асемблер |
Коментатор |
8080 |
3А 51 80 |
LDA 8051 |
Завантаження в А числа Х1 з комірки 8051 |
8003 |
D6 04 |
SUІ 04 |
Віднімання від вмісту А константи 4 (10)=4(16) |
8005 |
21 52 80 |
LXІ H,8052 |
Завантаження в регістри H,L адреси 8052 |
8008 |
86 |
ADD M |
Додавання до вмісту А вмісту комірки памяті, адреса якої зберігається в регістрах H,L |
8009 |
86 |
ADD M |
Те саме |
800A |
86 |
ADD M |
Те саме |
800В |
32 50 80 |
STA 8050 |
Завантаження вмісту А в комір ку 8050 |
800Е |
76 |
HLT |
Зупинка |
4.2. Скласти програму за прикладом 2, яка б демонструвала команди зсуву з використанням команд безумовного і умовного переходів. Скласти розгалужену програму контролю вмісту комірок пам'яті ОЗП за адресами Адр1=8030, Адр2=8031.
Якщо число Х1, яке зберігається за адресою Адр1, менше числа Х2 ( адреса Адр2 ) - зсунути вміст акумулятора вліво на одну позицію, Х1>Х2 - вправо на одну позицію, Х1=Х2 зсув вправо через перенос.
Приклад 2
Адреса |
Машинний код |
Асемблер |
Коментар |
8000 |
3A 30 80 |
LDA 8030 |
Завантаження в А числа Х1, з комірки Адр1 |
8003 |
21 31 80 |
LHІ,H8031 |
Завантаження в регістри H,L |
8006 |
BE |
CMPM |
Порівняння вмісту А з вмістом комірки пам'яті, адрес якої зберігається в регістрах H,L адреси Адр2 |
8007 |
DA 11 80 |
JC LAB |
Якщо вміст А менший вмісту комірки пам'яті за адресою Адр2, то перехід до виконання команди з мітками LAB RLG інакше виконується наступна команда. |
800А |
СА 15 80 |
JZ LAB1 |
Якщо вміст Х1=Х2, то перехід до виконання команди LAB1 RAR, інакше виконується наступна команда |
800D |
07 |
RLG |
Зсув вліво |
800Е |
C3 16 80 |
JMP END |
Перехід до команди HLT |
8011 |
OF |
LAB RRC |
Зсув вправо |
8012 |
C3 16 80 |
JMP END |
Перехід до команди HLT |
8015 |
1F |
LAB1 RAR |
Зсув вправо через перенос |
8016 |
32 50 80 |
STA 8050 |
Запис вмісту А в память за адресою 8050 |
8019 |
76 |
END HLT |
Зупинка |
4.3 Скласти програму для запису даних в регістри загального призначення B,C,D з записом вмісту відповідного регістру в акумулятор. Просумувати вміст А з регістром і виконати логічну операцію над регістром суми, результат занести в пам'ять.
Завдання виконувати за варіантом вказаним викладачем, за прикладом 3.
Таблиця 3
Варіант |
Регістри |
Число |
Логічна операція |
1 |
В , С |
17;99 |
Операція " 1 " |
2 |
D , B |
68;45 |
Операція " Виключне АБО " |
3 |
C , D |
10;4 |
Операція " АБО " |
4 |
D , C |
54;86 |
Порівняння регістру С з вмістом акумулятора |
Приклад 3.
Адреса |
Машинний код |
Асемблер |
Коментар |
8000 |
0604 |
MVІB,04 |
Записати число в регістр В 4(10)=4(16) |
8002 |
0Е06 |
MVІC,06 |
Записати число в регістр С С 6(10)=6(16) |
8004 |
78 |
MOV A,B |
Занести вміст регістру В в А |
8005 |
81 |
ADDC |
Сумування вмісту А і регістру С |
8006 |
2F |
СМА |
Інвертування суми (доповнення) |
8007 |
32 50 80 |
STA 8050 |
Записати результат в пам'ять |
800С |
76 |
HLT |
Зупинка |
5.Контрольні запитання
1.Призначення , структура та функції мікропроцесора.
2.Команди мікропроцесора.
3.Регістри загального призначення. Класифікація та призначення.
4.Способи адресації в МП.
5.Логічні команди в МП.
6.Команди безумовного переходу.
6. Література
1. Р. Токхайм. Микропроцессоры. Курс и упражнения.-М: Энергоатомиздат, 1988.
2. В.И.Васильев, Ю.М.Гусев, В.Н.Миронов. Электронные промышленные устройства.-М.: Высш.шк.,1988.
3. В.С.Медведев, Г.А.Орлов, Ю.И.Рассадкин и др. Управляющие и вычислительные устройства роботизированных комплексов на базе микро-ЭВМ.-М.: Высш.шк.,1990.
4. В.И.Зубчук, В.П.Сигорский, А.Н.Шкуро. Справочник по цифровой схемотехнике.-К.:Техника,1990.
PAGE 1