3. КОНТРОЛЬНІ ЗАПИТАННЯ
3.1. Для чого і як працює команда десяткової корекції акумулятора ?
3.2. Як виконується додавання двійково-кодованих десяткових чисел в МП КР580МВ80А ?
3.3. Які основні правила виконання віднімання BCD чисел ?
3.4. Який алгоритм перетворення 8-бітного двікового цілого беззнакового числа в упаковане десяткове число ви знаєте ?
3.5. У чому полягає основний зміст алгоритму перетворення упакованого десяткового цілого беззнакового числа у двійкове?
4. ЛАБОРАТОРНЕ ЗАВДАННЯ
4.1. Набрати, скомпілювати та запустити програму задану викладачем .
4.2. Пояснити дії, які виконує програма.
4.3. Перевірити достовірність одержаного результату.
5. ЗМІСТ ЗВІТУ
5.1. Титульний лист.
5.2. Мета роботи, теоретичні відомості.
5.3. Лабораторне завдання.
5.4. Програма у мнемокоді Асемблера і об'єктному коді..
5.5. Висновок та аналіз помилок допущених при роботі.
6. ЛІТЕРАТУРА
6.1 Микропроцессоры и микропроцессорные системы:Учебн. пособие для вузов/Под ред. В.Б. Смолова.-М.: Радио и связь,1981.
6.2. Калабеков Б.А., Микропроцессоры и их применение в системах передачи и обработки сигналов: Учебн. пособ. для вузов.-М.: Радио и связь,1988.
6.3. Лихтницендер Б.Я., Кузнецов В.Н., Микропроцессоры и вычислительные устройства в радиотехнике: Учебн. пособие.-К.: Вища школа,1988.
6.4 Ланцов А.Л., Зворыкин Л.Н., Осипов И.Ф. Цифровые устройства на ком-
плементарных МДП интегральных микросхемах.-М.: Радио и связь,1983.
МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
Національній університет "Львівська політехніка"
АЛГОРИТМИ ВИКОНАННЯ ОПЕРАЦІЙ ДОДАВАННЯ ТА ВІДНІМАННЯ ДВІЙКОВО\КОДОВАНИХ ДЕСЯТКОВИХ ЧИСЕЛ
ДЛЯ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А)
МЕТОДИЧНІ ВКАЗІВКИ
до лабораторної роботи №6
з курсу "Архітектура комп'ютерів"
для студентів базового напряму 6.08.04 "Комп'ютерні науки"
ЗАТВЕРДЖЕНО
на засіданні кафедри САП
Протокол № від 2003р..
ЛЬВІВ 2003
АЛГОРИТМИ ВИКОНАННЯ ОПЕРАЦІЙ ДОДАВАННЯ ТА ВІДНІМАННЯ ДВІЙКОВО\КОДОВАНИХ ДЕСЯТКОВИХ ЧИСЕЛ ДЛЯ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А) . Методичні вказівки до лабораторної роботи №5 з курсу "Архітектура комп'ютерів" для студентів базового напряму 6.08.04 "Комп'ютерні науки" /Укл. Панчак Р.Т., Процько І.О., Теслюк В.М. - Львів: НУ"ЛП", 2003р.-6с.
Укладачі: Панчак Роман Теодорович, ст. викл.,
Процько Ігор Омелянович, к.т.н.,доц.,
Теслюк Василь Миколайович, к.т.н., доц.,
Відповідальний за випуск: Ткаченко С.П., к.т.н., доц.
Рецензенти: Каркульовський В. І., к.т.н., доц.,
Стех Ю.В., к.т.н., доц.
1. МЕТА РОБОТИ
Вивчити алгоритми виконання операцій додавання та віднімання двійково\кодованих десяткоаих чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набути практичних навиків складання та налагоджування програм з використанням цих алгоритмів.
2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Існують протиріччя між машинним представленням чисел (двійкова система числення) і представлення чисел у повсякденному житті (десяткові числа). Перетворення між ними у випадку великого об'єму вхідних даних і вихідних результатів веде до помітних витрат комп'ютерного часу. Тому, розроблені форми представлення чисел, в яких суміщаються двійкова і десяткова системи числення. Такі форми отримали загальну назву двійково-кодованого десяткового представлення (Binari-Coded Decimal) або BCD-кодування. У спакованому форматі, який часто називають BCD-представленням десяткових чисел, байт містить дві десяткові цифри. Молодша цифра займає праву тетраду (біти 3:0), старша - ліву тетраду (біти 7:4). Обидві цифри представляються своїм двійковим еквівалентами, тобто за допомогою 0 і 1 відповідно з вагами двійкових розрядів 8 / 4 / 2 / 1. Наприклад, десятковому числу 72 , відповідає BCD код 0111 0010 (упакований байт BCD чисел).
Набір команд арифметичних операцій чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А) містить спеціальну команду двійково-десяткової корекції акумулятора DAA (Decimal Adjust Accumulator). , Для реалізації прикладних задач в МПС виконуються арифметичні операції з застосованням команди DAA. Наприклад, при виведенні опрацьованої інформації з МПС через дешифратор (К564ИД5) BCD коду в семисегментний на рідкокристалічний індикатор.
2.1 Арифметична операція додавання чисел в BCD кодах
Арифметична операцыя додавання чисел в BCD кодах виконується в два етапи:
1. Операнди додаються як двійкові числа;
2. Виконується корекція отриманого значення командою DAA.
Десяткова корекція вмісту акумулятора командою DAA відбувається в схемі двійково-десяткової корекції мікропроцесора КР580ВМ80А. 8-розрядний код акумулятора в цій схемі коректується за таким правилом:
- якщо молодша тетрада містить число, яке більше ніж 9, або встановлено прапорець переносу AC=1, то вміст акумулятора збільшується на 6;
- якщо після цього старша тетрада містить число, яке більше ніж 9, або встановлено прапорець CY=1, то до старшої тетради додається 6.
Суть корекції полягає додаванні при необхідності до двійково-десяткового коду тетради константи 6 (0110). Це пояснюється тим, що 4-розрядна двійкова тетрада має 16 можливих кодових комбінації (від 0000 до1111), що відповідають десятковим числам від 0 до 15, а при двійково-десятковому кодуванні чисел використовується всього 10 комбінацій (від 0000 до 1001) для представлення цифр від 0 до 9. тобто шість комбінацій, більших 1001 не використовуються. В результаті додавання одиниці до коду дев'ятки (1001) треба отримати код нуля (0000) в даній тетраді та одиницю переносу в наступну тетраду. Таким чином, якщо результат суми в тетраді буде більше 9, чому відповідає одиничне значення признаку переносу з даної тетради або код, більший 1001, то для одержання вірного двійково-десяткового коду до даної тетради додається коректуючий код шістки (0110). Наприклад, проміжний результат двійкового додавання BCD-чисел 79 і 39 має такий вигляд: 0111 1001
+ 0011 1001
1011 0010 (CY=1, AC=1)
Після виконання команди DAA : 0001 1000 (CY=1), отримали результат 118.
2.2 Арифметична операція віднімання чисел в BCD кодах
Використання набору арифметико-логічних команд МП КР580ВМ80А
використовується для виконання арифметичної операції віднімання двійково-кодованих десяткових чисел. Слід зауважити, для віднімання спеціальної команди корекції нема, тобто команда DAA не корегує результат двійкового віднімання. Тому операцію віднімання (X-Y) BCD-чисел необхідно виконувати в два етапи (операції виконуються в двійковому коді):
-утворити доповнюючий BCD-код від'ємника Y за формулою :
Yдоп = ((10k-1)-Y)+1), (1)
k-порядок BCD-чисел;
-додати отриманий двійково-десятковий код до зменшуваного : ( X+Yдоп ) ;
-скоригувати проміжний результат командою DAA.
Наприклад, для отримання доповнюючого десяткового коду дворозрядного BCD числа можна використати послідовність команд відповідно наведеної формули:
STC ; встановлення прапорця CY=1
MVI A,99h ; запис в акумулятор числа 99h
ACI 0 ; отримуєм еквівалент 100 в коді BCD
SUB M ; отримуєм доповнюючий BCD-код.
Так, для Y=63, в результаті виконання наведеної послідовності доповнюючий код буде Yдоп=(100-63)=37, а в BCD форматі 0011 0111.
2.3 Арифметична операція додавання/віднімання знакових чисел
в BCD кодах
В загальному випадку перед додаванням/відніманням необхідно проводити аналіз знаків операндів і формування при необхідності доповнюючих кодів операндів. Алгоритм додавання/віднімання BCD чисел зі знаком повинен обов'язково враховувати знаки операндів. Під знак в двійково-десятковому кодуванні відводиться старша тетрада: знаку "+" відповідає код 0000, знаку "-" код 1001. При перетворенні BCD-кодів з прямого в доповнюючий і навпаки змінюються лише цифрові розряди, знакові розряди зберігають своє значення. Однак, при безпосередньому виконанні арифметичних операцій над заковими розрядами поряд з цифровими виконуються операції додавання/віднімання і їх значення також підлягають десятковій корекції.
Наприклад, a) виконання операції над BCD-кодами 428 -316 =112,
доповнюючий BCD-код числа 316 після виконання (1) буде рівний 684:
0000 0100 0010 1000 ; +428
+1001 0110 1000 0100 ; Yдоп= -684
1001 1010 1010 1100
0110 0110 0110 ; DAA
1010 0001 0001 0010
0110 ; DAA
1 0000 0001 0001 0010
+ 1 1 2
б) виконання операції над BCD-кодами - 428 -316 = - 744,
доповнюючий BCD-код чисел 428 і 316 після виконання (1) буде віповідно рівний 572 і 684:
1001 0101 0111 0010 ; -572
+1001 0110 1000 0100 ; -316
10010 1011 1111 0110
0110 0110 0110 0000 ; DAA
11001 0010 0101 0110
- 2 5 6 , ; доповнюючий код.
Прямий код результату - (1000-256) = -744
2.4 Перетворення чисел двійково-десяткового формату
в двійковий формат і з двійкового формату в BCD-коди.
Для ефективного використання множини арифметичних команд МП КР580 застосовуються алгоритми перетворення з формату BCD у двійковий формат і навпаки, так як мікропроцесор КР580ВМ80А може виконувати додавання і віднімання над двійковими і двійково-кодованими десятковими (BCD-формат) числами.
Розглянемо алгоритм переведення 8-бітного двійкового цілого беззнакового числа в упаковане двійково-кодоване десяткове число. В упакованому BCD-числі кожен байт містить по дві двійково-десяткові цифри. Нехай в акумулятор записано байт, який інтерпретується як двійкове ціле беззнакове число (діапазон від 0 до 255), і необхідно утворити в парі регістрів HL його представлення як упакованого десяткового числа. Простий спосіб полягає в тому, щоб спочатку визначити цифру сотень шляхом віднімання 100 від даного двійкового числа. Далі послідовним відніманням 10 знаходиться цифра десятків. Після цього в акумуляторі залишається цифра одиниць. Віднімання сотень і десятків виконується до отримання від'ємної різниці з підрахунком числа віднімань, після цього відновлюється залишок додаванням до від'ємної різниці 100 (або 10).
Приклад програми перетворення 8-бітного цілого беззнакового числа в упаковане двійково-десяткове число :
BBCD: MVI H,-1
L100: INR H
SUI 100
JNC L100
ADI 100
MVI L,-1
L10: INR L
SUI 10
JNC L10
ADI 10
MOV C,A
MOV A,L
RRC
RRC
RRC
RRC
ORA C
MOV L, A
HLT
Розглянем алгоритм перетворення упакованого десяткового цілого цілого беззнакового числа у двійкове. Нехай в акумуляторі знаходиться байт, який представляє упаковане двійково-десяткове число (діапазон від 0 до 99), і необхідно утворити в акумуляторі еквівалентне двійкове число. Алгоритм перетворення полягає в тому, щоб старшу тетраду акумулятора (цифру десятків) домножити на десять і додати до отриманого добутку молодшу тетраду (цифру одиниць). Найпростіше множення на 10 (в двійковому коді 1010 В) виконується шляхом множення цифри на 8 (зсув на три біти вліво) і додавання цифри, домноженої на 2 (зсув на 1 біт вліво).
Програма перетворення упакованого десяткового цілого цілого беззнакового числа у двійкове:
BCDB: MOV B,A
ZNI F0h
RRC
MOV C,A
RRC
RRC
ADD c
MOV C,A
MOV A,B
ANI 0Fh
ADD C
HLT