DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

АЛГОРИТМИ ВИКОНАННЯ ОПЕРАЦІЙ ДОДАВАННЯ ТА ВІДНІМАННЯ ДВІЙКОВО\КОДОВАНИХ ДЕСЯТКОВИХ ЧИСЕЛ ДЛЯ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А).

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Системи автоматизованого проектуваня

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютери і мікропроцесорні системи
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР Звіт про виконання лабораторної роботи №6 на тему: “АЛГОРИТМИ ВИКОНАННЯ ОПЕРАЦІЙ ДОДАВАННЯ ТА ВІДНІМАННЯ ДВІЙКОВО\КОДОВАНИХ ДЕСЯТКОВИХ ЧИСЕЛ ДЛЯ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А) ” з курсу: “ Комп’ютери та мікропроцесорні системи ” Виконав студент групи КН-3 Львів - 2006 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 Постановка лабораторного завдання Використовуючи акумулятор, ввести дані 89, 71, 65, 58 в пам’ять. Виконати над ними дії: (1-2)+(3-4). Дані представлені у двійково-десятковому форматі. Текст програми 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 MOV B,A MVI A,100 LXI H,801H SUB M ADD B DAA MOV D,A LDA 802H MOV B,A MVI A,100 LXI H,803H SUB M ADD B DAA ADD D DAA HLT Результати виконання програми  EMBED PBrush  Висновки: виконавши дану лабораторну роботу, я вивчив операції додавання та віднімання чисел у двійково-десятковому форматі.
Антиботан аватар за замовчуванням

2015

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!