МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт про виконання лабораторної роботи №7
на тему: “АЛГОРИТМИ ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ НАД БАГАТОРОЗРЯДНИМИ ЧИСЛАМИ В ОДНОКРИСТАЛЬНОМУ МП 8080 (КР580ВМ80А)”
з курсу: “ Комп’ютери та мікропроцесорні системи ”
Виконав
студент групи КН-3
Львів - 2006
МЕТА РОБОТИ
Вивчити алгоритми виконання арифметичних операцій над багаторозрядними числами в однокристальному мікропроцесорі Intel 8080 (КР580ВМ80А). Набути практичних навиків складання та налагоджування програм виконання операцій додавання/віднімання та множення/ділення багаторозрядних чисел з використанням цих алгоритмів.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Однокристальний мікропроцесор Intel 8080 (КР580ВМ80А) - 8 розрядний, тобто виконує арифметико-логічні операції над байтами даних. Однак в багатьох застосуваннях МПС 8-біт недостатньо для одержання заданої точності. В МП КР580ВМ80А можна визначити тип даних любого формату (ефективно кратний 8-бітам: 24біти, 32біти,...,1024біти). На основі виконання заданого набору команд, виконання операцій з такими форматами можна здійснювати побайтно у 8-розрядному АЛУ. Тому над числами, що представляються двома і більше байтами, основні арифметичні операції реалізуються програмним шляхом.
Додавання та віднімання багаторозрядних чисел цілого типу
При складанні програм додавання і віднімання багаторозрядних чисел важливу особливість становить організація циклічної частини арифметичної операції. Дані операції спочатку починають виконувати над молодшими байтами (при початковому CY=0), а пізніше над всіма решта (з молодшого до найстаршого) з врахуванням переносів. Основними командами, що забезпечує додавання текучих байтів з врахуванням прапорця переносу CY є команди:
ADC r (A)(A)+(r)+(CY);
ADC M (A)(A)+((H)(L))+(CY);
ACI байт (A)(A)+(байт)+(CY);
віднімання: SBB r (A)(A)-(r)-(CY);
SBB M (A)(A)-((H)(L))-(CY);
SBI байт (A)(A)-(байт)-(CY);
Наведені команди дадавання/віднімання використовують значення переносу CY, сформованого на попередньому повторенні циклу. Тобто, організований цикл багаторозрядної арифметичної операції не повинен містити команд, що можуть змінити значення CY. Якщо внесення в цикл багаторозрядної операції команд, що впливають на прапорець переносу, необхідне, то попередньо запам'ятовується CY, а перед багаторозрядною операцією - відновлюється.
Множення та ділення багаторозрядних чисел цілого типу
В однокристальному мікропроцесорі Intel 8080 (КР580ВМ80А) у 8 розрядному АЛУ ефективно виконувати операцію множення (4)х(4)=(8) розрядними числами. Відомі способи і алгоритми множення/ділення (алгоритм Бута, ділення з відновленням залишку) виконуються в МПС через команди додавання/віднімання та зсуву багаторозрядних даних.
Для богаторозрядних цілих чисел в однокристальному мікропроцесорі КР580ВМ80А можна створити підпрограму множення різноманітних двійкових форматів (8)х(4)=(12), (8)х(8)=(16), (16)х(8)=(24), (16)х(16)=(32) та ін. Множення над двома n1 та n2-бітними співмножниками формує (n1+n2) -розрядний добуток. Підпрограма ділення багаторозрядних чисел більших ніж 8-розрядів може використовувати формати (16):(8), (24):(8), (24):(16), (32):(16) та ін. Ділення над двома n1, n2-бітними співмножниками формує (n1-n2) - розрядну частку.
Можна задати і виконувати операції множення/ділення й в інших форматах, наприклад 6:2, але при цьому виконання операцій над такими форматами може ускладнюватись.
Важливо відзначити, що у випадку множення/ділення на цілі числа рівні степені двійки (2,4,8,...,2n )можна використовувати команди зсуву n-раз вправо/вліво, попередньо встановивши біт прапорця переносу в нуль:
STC ; (CY) (1)
CMC ; (CY=0)
для множення на 2 RAL ; (CY)(A7), (A0) (CY=0), (An+1) (An);
для ділення на 2 RAR ; (CY=0)(A7), (A0) (CY), (An) (An+1).
Однак, перетворення в процесі виконання арифметичних операцій, у випадку великого об'єму вхідних багаторозрядних даних і вихідних результатів, веде до помітних витрат комп'ютерного часу. Тому сучасні скалярні мікропроцесори у вигляді надвеликих інтегральних схем (НВІС) використовують 64-розрядне АЛУ та пакетні форми представлення чисел.
АРИФМЕТИЧНІ ОПЕРАЦІЇ НАД ДІЙСНИМИ ЧИСЛАМИ
Існує широкий клас задач, в тому числі обчислення рівнянь цифрового фільтра (ЦФ), де необхідно проводити обчислення в МПС використовуючи дійсні числа. В цифрових пристроях використовуються дві форми представлення чисел: формат з фіксованою комою, формат з плаваючою комою.
Арифметичні операції над числами в форматі з фіксованою комою
В форматі з фіксованою комою відводяться ціла частина і дробова частина у вигляді цілих чисел. Один старший розряд використовається в якості знаку. Кома відділяє цілу частину числа від дробової та займає фіксоване положення. Враховуючи 8-розрядне АЛУ МП КР580ВМ80А, найбільш поширені формати чисел з фіксованою комою, де відведено на цілу і дробову частину по тетраді, байту, слову (4:4, 8:8, 16:16 і тд. ). Можна задати і виконувати операції й в інших форматах, наприклад 6:2, але деякі операції над такими форматами можуть ускладнюватись. Неправильний вибір розрядної сітки може в результаті виконання арифметичних операцій привести до переповнення, що в цьому випадку вимагає масштабування.
Додавання/віднімання двійкових чисел представлених в форматі з фіксованою комою, по суті не відрізняються від операцій додавання або віднімання цілих багаторозрядних чисел. Наприклад, результати двійкового додавання або віднімання дійсних чисел матимуть вигляд:
а) 010000, 1000 16,5
+ 010010, 1000 +18,5
100011, 0000 35,0
б) 0110,0100 6,25 в) 1000,1000 8,50
+1000,1000 +8,50 -0110,0100 - 6,25
1110,1100 14.75 , 0010,0100 2,25 .
При цьому, враховується розряд перенесення CY з дробової частини в цілу.
Арифметичні операції множення і ділення в форматі з фіксованою комою не відрізняються по суті з алгоритмами їх виконання над цілими числами. Характерним є те, що розрядність добутку виділяється для цілої та дробової частин. Наприклад,
а) 8.5 1000,1000
х 6,25 х 0110,0100 ;
53,125 00110101,00100000
б) 0,8125 0,1101
х 0,6875 х 0,1011 .
0,10001111
Для порівняння, добуток цілих чисел рівний 32 розряди, для множників 16х16 розрядів, а добуток з фіксованою комою рівний 16:16, для множників (8:8) х (8:8) розрядів (добуток з фіксованою комою рівний 32:32, для множників (16:16)х(16:16) розрядів).
Операція ділення для чисел представлених в форматі з фіксованою комою містить дії аналогічні виконанню операції ділення над багаторозрядними цілими числами, результатом операції є частка та залишок представлені у заданих форматах. Наприклад, якщо ділене і дільник представлені в форматі (4:4), то необхідно одержану частку перемножити на 2 в четвертій степені для одержання відповідного формату:
1010,0000 /0101.0000 = 0010 0010,0000 (після зсуву на 4-біти);
10,0 / 5,0 = 2 .
Арифметичні операції над числами в форматі з плаваючою комою
Формат представлення чисел з плаваючою комою передбачає представлення числа в показниковій формі: мантиса, основа, порядок. В МПС такі числа представлені у вигляді двох груп чисел: перша група називається мантисою і визначає саме число, друга група пназивається порядком. Якщо задається формат з умовою наявності старшого розряду мантиси не рівного нулю, то маєм нормальну форму представлення. В цій формі запису маєм значно більший діапазон представлення дійсних чисел в порівнянні з такою самою розрядністю чисел з фіксованою комою, але алгоритм виконання арифметичних операцій при цьому ускладнюється. Так, операція додавання або віднімання виконується такою послідовністю:
- вирівнюються порядки доданків, молодший порядок збільшується до більшого порядку одного з доданків;
- виконується перетворення мантис в доповнюючий код, при необхідноcті;
- відповідно, коректується мантиса числа, порядок якого вирівнюється;
- виконується додавання мантис аналогічно алгоритму додавання чисел з фіксованою комою;
- у випадку необхідності виконується нормалізація результату;
- до суми записуєм сформований порядок.
Операція множення в форматі з плаваючою крапкою виконується за такою послідовністю:
- визначається знак добутку;
- перемножуються мантиси співмножників аналогічно алгоритму множення чисел з фіксованою комою;
- визначається порядок добутку за допомогою арифметичної операції додавання цілих чисел зі знаком;
- у випадку необхідності виконується нормалізація результату;
- до суми записуєм сформований порядок.
Ділення в форматі з плаваючою крапкою виконується аналогічно так, як і множення. Мантиса діленого повинна бути менше мантиси дільника, що одержуєм через масштабування. Порядок частки визначається відніманням порядків діленого та дільника. У випадку необхідності виконується нормалізація результату;
Використання набору арифметико-логічних команд МП КР580ВМ80А
використовується для виконання арифметичних операцій над багаторозрядними числами, форма представлення і формати яких визначаються на етапі проектування.
Індивідуальне завдання:
Виконати арифметичні операції:
1326/13-414/9--5*7
Текст програми
org 100h
mvi b,13 ;dilene/mno*ene
mvi c,26
mvi d,13 ;dilnyk/mno*nyk
call m1 ;13/13
mvi l,100 ;rezultat 1*100
mov b,c
mvi d,13
call m1
mov a,l
add e
mov l,a ;rezultat 1326/13
mvi b,41
mvi d,9
call m1
mov c,d ;zalywok v c
mov d,e ;rezultat 41/9 v d
mvi b,10
call m2
mov d,c
mov c,a ;rezultat 10*(41/9)-cila 4astyna
call m2 ;v a rezultat 10*(41/9)-zalywok
adi 4
mov b,a
mvi d,9
call m1
mov a,e
add c
mov c,a ;rezultat 414/9
mvi b,7
mvi d,5
call m2
mov b,a ;rezultat 5*7
mov a,l
sub c
sub b
hlt
m1: MOV A,B
mvi e,0
CYCLE: SUB D
JC L1
INr e
JMP CYCLE
L1: ADD D
mov d,a
ret
m2: mov a,b
mvi e,1
cc2: add b
inr e
mov h,a
mov a,e
cmp d
jz l2
mov a,h
jmp cc2
l2: mov a,h
ret
Карта памп’яті
Висновок: на цій лабораторній роботі я вивчив алгоритми виконання арифметичних операцій над багаторозрядними числами в однокристальному мікропроцесорі Intel 8080 (КР580ВМ80А), набув практичних навиків складання та налагоджування програм виконання операцій додавання/віднімання та множення/ділення багаторозрядних чисел з використанням цих алгоритмів.