МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт про виконання лабораторної роботи №3
на тему: “ Арифметичні та логічні команди однокристального МП КР580 ”
з курсу: “ Комп’ютери та мікропроцесорні системи ”
Виконав
студент групи КН-3
Львів - 2006
1. МЕТА РОБОТИ
Вивчити арифметичні та логічні команди однокристального мікропроцесора (МП) КР580, набути практичні навики складання і налагоджування програм з використанням цих команд.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Обчислювальні можливості МП КР580 визначають команди додавання і команди віднімання 8-бітних операндів. Операції множення і ділення, а також операції з іншими форматами даних реалізуються за допомогою підпрограм, які містять команди додавання і віднімання 8-бітних операндів. Це призводить до значного зменшення продуктивності МП-системи. Команди арифметичних операцій включають команди інкрементування (збільшення на 1) як 8-бітних, так і 16-бітних операндів. У групу арифметичних команд включена команда десяткової корекції аргументу. Вона дозволяє виконувати обробку двійково-кодованих десяткових чисел. У всіх командах арифметичних операцій допускається інтерпретація 8-бітних операндів як беззнакових цілих, так і знакових цілих чисел.
Формат беззнакових цілих чисел такий:
7 6 5 4 3 2 1 0
значущі біти
Формат знакових чисел такий:
7 6 5 4 3 2 1 0
S
значущі біти
знак
Стандартне кодування знака має такий вигляд: S = 0 - число додатне, S = 1 - число від'ємне.
Додатні числа представляються у прямому коді. Операцію віднімання МП реалізує як операцію додавання операндів у доповнюючому коді.
У прямому коді біт s містить знак числа, а решту бітів містить абсолютне значення числа.
Наприклад: число 56 -> 38Н
0011 1000
число (-75) (-4В)Н
1100 1011
У доповнюючому коді зберігається загальний формат знакових цілих чисел. Додатні числа представляються без будь-яких змін, як в прямому коді. Отримання доповнюючого коду від'ємного числа (-Х) здійснюється за такою формулою
Х доп. = 2**n - [X],
де n - довжина машинного слова.
Алгоритм отримання доповнюючого коду від'ємного числа містить такі кроки:
1. Записати n - бітний модуль від'ємного числа;
2. Отримати обернений код числа, інвертувавши усі біти;
3. До оберненого коду додати 1.
Наприклад: (-83) (-53)Н
1. модуль числа 0101 0011
2. обернений код числа 1010 1100
3. доповнюючий код числа 1010 1100
+______1
1010 1101
Двійково-кодовані десяткові числа представляються в упакованому форматі і складаються з двох тетрад. Молодша цифра займає праву тетраду (біти 3 : 0), старша-ліву (біти 7 : 4).
7 6 5 4 3 2 1 0
старша цифра молодша цифра
Обидві цифри представляються своїми двійковими еквівалентами (кодом 8421 за двійковими вагами). Максимальне число, яке може містити тетрада - 9, а мінімальне -0.
В арифметичних операціях важливе місце відводиться так званим ознакам або прапорцям, які показують особливості отриманого результату операцій.
Команди арифметичних операцій діють на прапорці по-різному, але в загальному вони показують такі ознаки результату:
CY - прапорець переносу (Саrr Y) в операції додавання (віднімання) встановлюється в 1 при наявності переносу (займу) із старшого біта результату: по суті, цей прапорець можна вважати розширенням результату на один біт вліво.
S - прапорець знака (Sign) своїм станом повторює значення старшого (знакового) біта результату:
Z - прапорець нуля (Zero) встановлюється в 1 при отриманні нульового результату 0000 0000:
P - прапорець паритету (Parity), або парності встановлюється в 1 при наявності переносу (позики) з молодшої тетради результату в старшу.
Найінтенсивніше в обчислювальних алгоритмах використовується прапорець CY. Саме завдяки йому малорозрядний МП може оперувати числами довільної розрядності. Прапорець АС дозволяє працювати з десятковими числами.
Однокристальний МП КР580 може виконувати два типи арифметичних операцій (додавання і віднімання) з різними способами адресації. Команди цієї групи виконують арифметичні операції над даними в регістрах і комірках пам'яті. При виконанні арифметичних операцій усі ознаки (прапорці) встановлюються у відповідний стан у відповідності із загальними правилами. Вийнятки спеціально обумовлюються.
1. Додавання вмісту регістра до вмісту акумулятора.
ADD r
(A) (A) + (r)
Вміст регістра r(A,B,C,D,E,H,L) додається до вмісту акумулятора. Результат заноситься в акумулятор. Команда змінює стан прапорців Z,S,P,CY,AC за загальними правилами.
2. Додавання вмісту комірки пам'яті до вмісту акумулятора
ADD M
(A0 (A) + ((H)(L))
Вміст комірки пам'яті, адреса якої міститься в регістрах H і L, додається до вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
3. Безпосереднє додавання
ADI байт
(A) (A) + (байт 2)
Вміст другого байта команди додається до вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
4. Додавання вмісту регістра і біта прапорця переносу до вмісту акумулятора.
ADC r
(A) (A) + (r) + (CY)
Вміст регістра r(A,B,C,D,E,H,L) і біт прапорця переносу CY додається до вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
5. Додавання вмісту комірки пам'яті і біта прапорця переносу до вмісту акумулятора
ADC M
(A) (A) + ((H)(L)) + (CY)
Вміст комірки пам'яті, адреса якої вказана в регістрах H і L, і вміст біта прапорця переносу додається до вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
6. Безпосереднє додавання з бітом переносу
ACI байт
(A) (A) + (байт 2) + (CY)
Вміст другого байта команди і біта прапорця переносу додається до вмісту акумулятора. Результат записується в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
7. Віднімання вмісту регістра
SUB r
(A) (A) - (r)
Вміст регістра r(A,B,C,D,E,H,L) віднімається від вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
8. Віднімання вмісту комірки пам'яті
SUB M
(A) (A) - ((H)(L))
Вміст комірки пам'яті, адреса якої вказана в регістрах H і L , віднімається від вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z, S, P, CY, AC за загальними правилами.
9. Безпосереднє віднімання
SUI байт
(А) (А) - (байт 2)
Вміст другого байта команди віднімається від вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці Z,S,P,CY,AC за загальними правилами.
10. Віднімання вмісту регістра і біта переносу
SBB r
(А) (А) - (r) - (CY)
Вміст регістра r(A,B,С,D,Е,Н,L) і біт прапорця переносу CY віднімаються від вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на прапорці за загальними правилами.
11. Віднімання вмісту комірки пам’яті і біта переносу
SBB M
(A) (A) - ((H)(L)) - (CY)
Вміст комірки пам'яті, адреса якої міститься в регістрах і вміст біта прапорця переносу CY віднімаються від вмісту акумулятора. Результат заноситься в акумулятор. Команда впливає на усі прапорці за загальними правилами.
12. Безпосереднє віднімання з позикою
SBI байт
(A) (байт 2) - (CY)
Вміст другого байта команди і біт прапорця переносу CY віднімаються від акумулятора. Результат заноситься в акумулятор. Команда впливає на усі прапорці за загальними правилами.
13. Збільшення вмісту регістра
INR r
(r) (r) + 1
Вміст регістра r(A,B,C,D,E,H,L) збільшується на 1. Команда впливає на стан усіх прапорців, крім прапорця переносу CY.
14. Збільшення вмісту комірки пам'яті
INR M
((H)(L)) ((H)(L)) + 1
Вміст комірки пам'яті, адреса якої вказана в регістрах H і L, збільшується на одиницю. Команда впливає на стан усіх прапорців, крім прапорця переносу CY.
15. Зменшення вмісту регістра
DCR r
(r) (r) -1
Вміст регістра r(A,B,C,D,E,H,L) зменшується на одиницю. Команда впливає на усі прапорці, крім прапорця переносу CY.
16. Зменшення вмісту комірки пам'яті
DCR M
((H)(L)) ((H)(L)) – 1
Вміст комірки пам'яті, адреса якої міститься в регістрах H і L, зменшується на одиницю. Команда впливає на усі прапорці, крім прапорця переносу CY.
17. Збільшення вмісту пари регістрів на одиницю
INX rp
(rh)(rl) (rh)(rl) + 1
Вміст пари регістрів rp збільшується на одиницю. Команда не впливає на прапорці.
18. Зменшення вмісту пари регістрів
DCX rp
(rh)(rl) (rh)(rl) - 1
Вміст пари регістрів rp зменшується на одиницю. Команда не впливає на прапорці.
19. Додавання вмісту пари регістрів до вмісту регістрів H і L.
DAD rp
(H)(L) (H)(L) + (rh)(rl)
Вміст пари регістрів rp ((B,C), (D,E), (H,L), SP) додається до вмісту регістрів H і L. Використовується тільки прапорець переносу CY. Він встановлюється, коли має місце перенос при додаванні з подвійною точністю, в протилежному випадку він скидається.
20. Десяткове доповнення акумулятора
DAA
8-бітне число в акумуляторі доповнюється до представлення у вигляді двох 4-бітних чисел в двійково-десятковому коді за допомогою таких операцій:
- Якщо число, яке представлене чотирма молодшими бітами акумулятора, більше ніж 9, або встановлений прапорець допоміжного переносу АС, тоді до вмісту акумулятора додається 6;
Якщо тепер число, яке представлене чотирма старшими бітами акумулятора, більше ніж 9, або встановлений прапорець переносу CY, тоді число 6 додається до числа, яке утворене чотирма старшими бітами акумулятора. Команда встановлює усі прапорці за загальними правилами.
21. Логічне множення вмісту регістра і акумулятора
ANA R; (A) (A) ^ (R); R:A,B,C,D,E,H,L.
Над вмістом регістра загального призначення (РЗП) R і акумулятора виконується операція логічного множення. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлюються за загальними правилами.
22. Логічне множення вмісту комірки пам'яті і акумулятора
ANA M; (A) (A) ^ ((H)(L))
Над вмістом комірки пам'яті, адреса якої міститься в регістрах H і L, і вмістом акумулятора виконується операція логічного множення. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
23. Логічне множення з безпосереднім операндом
ANI d8; (A)(A) ^ (байт2); d8-константа довжиною в один байт.
Над вмістом другого байта команди і акумулятора виконується операція логічного множення. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
24. Логічне додавання вмісту акумулятора і регістра
ORA v R; (A) (A) v (R); R:A,B,C,D,E,H,L
Над вмістом РЗП R і акумулятора виконується операція логічного додавання. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
25. Логічне додавання вмісту комірки пам'яті і акумулятора
ORA v M; (A) (A) ((H)(L))
Вміст комірки пам'яті, адреса якої міститься в регістрах H і L, логічно додається до вмісту акумулятора. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
26. Логічне додавання з безпосереднім операндом.
ORI v d8; (A) (A) (байт2)
Вміст другого байта команди логічно додається до вмісту акумулятора. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
27. Додавання за модулем 2 вмісту акумулятора і вмісту регістра
XRA R; (A) (A) Е (R); R:A,B,C,D,E,H,L
До вмісту РЗП R додається по модулю 2 вміст акумулятора. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлюються за загальними правилами.
28. Додавання за модулем 2 вмісту комірки пам'яті і вмісту акумулятора
XRA M; (A) (A) Е ((H)(L))
До вмісту комірки пам'яті, адреса якої міститься в регістрах H і L, додається за модулем 2 вміст акумулятора. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєютьтся за загальними правилами.
29. Додавання за модулем 2 з безпосереднім операндом
XRI d8; (A) (A) Е (d8)
До вмісту акумулятора додається за модулем 2 вміст другого байта команди. Результат записується в акумулятор. Прапорці CY і AC скидаються в 0. Решта прапорців встановлєються за загальними правилами.
30. Доповнення акумулятора
CMA; (A) (A)
Вміст акумулятора інвертується. Результат записується в акумулятор. Команда на прапорці не впливає.
31. Зсув вліво через прапорець переносу
RAL; (CY) (A7); (A0) (CY); (An+1) (An)
Вміст акумулятора зсувається на одну позицію вліво через біт прапорця переносу CY. Молодший біт акумулятора дорівнює біту прапорця переносу CY, а CY - дорівнює величині старшого біта акумулятора.
CY 7 6 5 4 3 2 1 0
Акумулятор
Команда впливає лише на прапорець переносу CY.
32. Зсув вправо через прапорець переносу
RAR; (A7) (CY); (CY) (A0); (An) (An+1)
Вміст акумулятора зсувається на одну позицію вправо через біт прапорця переносу CY. Біт CY дорівнює молодшому біту акумулятора, а старший біт акумулятора дорівнює біту прапорця переносу CY.
CY 7 6 5 4 3 2 1 0
Акумулятор
Команда впливає лише на прапорець переносу CY.
33. Циклічний зсув вліво
RLC; (CY) (A7); (A0) (A7); (An+1) (An)
Вміст акумулятора зсувається вліво на одну позицію. Вміст старшого біта акумулятора заноситься в молодший біт і біт прапорця переносу CY.
CY 7 6 5 4 3 2 1 0
Акумулятор
Команда впливає лише на прапорець переносу CY.
34. Циклічний зсув вправо
RRC; (CY) (A0); (A7) (A0); (An) (An+1)
Вміст акумулятора зсувається на одну позицію вправо. Вміст молодшого біта акумулятора заноситься в найстарший біт і біт пра-порця переносу. Команда впливає лише на прапорець переносу CY.
35. Встановлення біта прапорця переносу
STC; (CY) (1);
Біт прапорця переносу встановлюється в 1. На інші прапорці команда не впливає.
36. Інвертування біта прапорця переносу
CMC; (CY) (CY)
На інші прапорці команда не впливає.
Постановка лабораторного завдання
Використовуючи акумулятор, ввести дані 89, 71, 65, 58 в пам’ять. Виконати над ними дії: (1-2)+(3-4). Результат зсунути вліво на 2 розряди.
Текст програми
ORG 100H
LXI H,800H
MVI A,89
MOV M,A
INX H
MVI A,71
MOV M,A
INX H
MVI A,65
MOV M,A
INX H
MVI A,58
MOV M,A
LDA 800H
LXI H,801H
SUB M
MOV B,A
LDA 802H
LXI H,803H
SUB M
ADD B
RAL
RAL
HLT
Результати виконання програми
EMBED PBrush
Висновки: виконавши дану лабораторну роботу, я вивчив арифметичні та логічні команди МП КР 580 та набув практичні навики складання програм з використанням цих команд.