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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ Національній університет "Львівська політехніка" Звіт до лабораторної роботи №6 АЛГОРИТМИ ВИКОНАННЯ ОПЕРАЦІЙ ДОДАВАННЯ ТА ВІДНІМАННЯ ДВІЙКОВО\КОДОВАНИХ ДЕСЯТКОВИХ ЧИСЕЛ ДЛЯ ОДНОКРИСТАЛЬНОГО МП 8080 (КР580ВМ80А) Виконала Ст.гр.КН-3 ЛЬВІВ 2006 МЕТА РОБОТИ: Вивчити алгоритми виконання операцій додавання та віднімання двійково- десяткових чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набути практичних навиків складання та налагоджування програм з використанням цих алгоритмів. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Існують протиріччя між машинним представленням чисел (двійкова система числення) і представлення чисел у повсякденному житті (десяткові числа). Перетворення між ними у випадку великого об'єму вхідних даних і вихідних результатів веде до помітних витрат комп'ютерного часу. Тому, розроблені форми представлення чисел, в яких суміщаються двійкова і десяткова системи числення. Такі форми отримали загальну назву двійково-кодованого десяткового представлення (Binari-Coded Decimal) або BCD-кодування. У спакованому форматі, який часто називають BCD-представленням десяткових чисел, байт містить дві десяткові цифри. Молодша цифра займає праву тетраду (біти 3:0), старша - ліву тетраду (біти 7:4). Набір команд арифметичних операцій чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А) містить спеціальну команду двійково-десяткової корекції акумулятора DAA (Decimal Adjust Accumulator). Арифметична операція додавання чисел в 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) в даній тетраді та одиницю переносу в наступну тетраду. Наприклад, проміжний результат двійкового додавання BCD-чисел 79 і 39 має такий вигляд: 0111 1001 + 0011 1001 1011 0010 (CY=1, AC=1) Після виконання команди DAA : 0001 1000 (CY=1), отримали результат 118. Арифметична операція віднімання чисел в BCD кодах Для отримання доповнюючого десяткового коду дворозрядного BCD числа можна використати послідовність команд відповідно наведеної формули: STC ; встановлення прапорця CY=1 MVI A,99h ; запис в акумулятор числа 99h ACI 0 ; отримуєм еквівалент 100 в коді BCD SUB M ; отримуєм доповнюючий BCD-код. Так, для Y=63, в результаті виконання наведеної послідовності доповнюючий код буде Yдоп=(100-63)=37, а в BCD форматі 0011 0111. Арифметична операція додавання/віднімання знакових чисел в BCD кодах Алгоритм додавання/віднімання BCD чисел зі знаком повинен обов'язково враховувати знаки операндів. Під знак в двійково-десятковому кодуванні відводиться старша тетрада: знаку "+" відповідає код 0000, знаку "-" код 1001. Наприклад, 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-коди. Приклад програми перетворення 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 Індивідуальне завдання: Виконати наступні операції над беззнаковими двійково-десятковими числами: 793-524+80-120. Числа виводити через регістрову пару DE, а результат з числами в ОР в регістрістрову пару HL в упакованому BCD форматі. ORG 100h LXI H,793h SHLD 300h LXI H,524h SHLD 302h LXI H,80h SHLD 304h LXI H,120h SHLD 306h LDA 302h MOV B,A mvi A,99h sub B stc aci 0 mov E,A LDA 303h MOV B,A mvi A,9h sub B mov D,A lda 300h add E DAA mov E,A lda 301h adc D DAA mov D,A lda 304h add E DAA mov E,A lda 305h adc D DAA mov D,A LDA 306H MOV B,A mvi A,99h sub B stc aci 0 mov C,A lda 307h mov B,a mvi A,9h sub B mov B,A Mov a,c add e daa mov e,a mov a,b adc d daa mov d,a HLT Результати виконання програми: C0Z0M0E0I0 A=00 B=0000 D=0000 H=0000 S=0100 P=0100 LXI H,0793 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0793 S=0100 P=0103 SHLD 0300 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0793 S=0100 P=0106 LXI H,0524 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0524 S=0100 P=0109 SHLD 0302 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0524 S=0100 P=010C LXI H,0080 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0080 S=0100 P=010F SHLD 0304 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0080 S=0100 P=0112 LXI H,0120 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0120 S=0100 P=0115 SHLD 0306 C0Z0M0E0I0 A=00 B=0000 D=0000 H=0120 S=0100 P=0118 LDA 0302 C0Z0M0E0I0 A=24 B=0000 D=0000 H=0120 S=0100 P=011B MOV B,A C0Z0M0E0I0 A=24 B=2400 D=0000 H=0120 S=0100 P=011C MVI A,99 C0Z0M0E0I0 A=99 B=2400 D=0000 H=0120 S=0100 P=011E SUB B C0Z0M0E0I0 A=75 B=2400 D=0000 H=0120 S=0100 P=011F STC C1Z0M0E0I0 A=75 B=2400 D=0000 H=0120 S=0100 P=0120 ACI 00 C0Z0M0E0I0 A=76 B=2400 D=0000 H=0120 S=0100 P=0122 MOV E,A C0Z0M0E0I0 A=76 B=2400 D=0076 H=0120 S=0100 P=0123 LDA 0303 C0Z0M0E0I0 A=05 B=2400 D=0076 H=0120 S=0100 P=0126 MOV B,A C0Z0M0E0I0 A=05 B=0500 D=0076 H=0120 S=0100 P=0127 MVI A,09 C0Z0M0E0I0 A=09 B=0500 D=0076 H=0120 S=0100 P=0129 SUB B C0Z0M0E0I0 A=04 B=0500 D=0076 H=0120 S=0100 P=012A MOV D,A C0Z0M0E0I0 A=04 B=0500 D=0476 H=0120 S=0100 P=012B LDA 0300 C0Z0M0E0I0 A=93 B=0500 D=0476 H=0120 S=0100 P=012E ADD E C1Z0M0E1I0 A=09 B=0500 D=0476 H=0120 S=0100 P=012F DAA C1Z0M0E1I0 A=69 B=0500 D=0476 H=0120 S=0100 P=0130 MOV E,A C1Z0M0E1I0 A=69 B=0500 D=0469 H=0120 S=0100 P=0131 LDA 0301 C1Z0M0E1I0 A=07 B=0500 D=0469 H=0120 S=0100 P=0134 ADC D C0Z0M0E1I0 A=0C B=0500 D=0469 H=0120 S=0100 P=0135 DAA C0Z0M0E1I1 A=12 B=0500 D=0469 H=0120 S=0100 P=0136 MOV D,A C0Z0M0E1I1 A=12 B=0500 D=1269 H=0120 S=0100 P=0137 LDA 0304 C0Z0M0E1I1 A=80 B=0500 D=1269 H=0120 S=0100 P=013A ADD E C0Z0M1E0I0 A=E9 B=0500 D=1269 H=0120 S=0100 P=013B DAA C1Z0M0E0I0 A=49 B=0500 D=1269 H=0120 S=0100 P=013C MOV E,A*013D C1Z0M0E0I0 A=49 B=0500 D=1249 H=0120 S=0100 P=013D LDA 0305 C1Z0M0E0I0 A=00 B=0500 D=1249 H=0120 S=0100 P=0140 ADC D C0Z0M0E0I0 A=13 B=0500 D=1249 H=0120 S=0100 P=0141 DAA C0Z0M0E0I0 A=13 B=0500 D=1249 H=0120 S=0100 P=0142 MOV D,A C0Z0M0E0I0 A=13 B=0500 D=1349 H=0120 S=0100 P=0143 LDA 0306 C0Z0M0E0I0 A=20 B=0500 D=1349 H=0120 S=0100 P=0146 MOV B,A C0Z0M0E0I0 A=20 B=2000 D=1349 H=0120 S=0100 P=0147 MVI A,99 C0Z0M0E0I0 A=99 B=2000 D=1349 H=0120 S=0100 P=0149 SUB B C0Z0M0E0I0 A=79 B=2000 D=1349 H=0120 S=0100 P=014A STC C1Z0M0E0I0 A=79 B=2000 D=1349 H=0120 S=0100 P=014B ACI 00 C0Z0M0E0I0 A=7A B=2000 D=1349 H=0120 S=0100 P=014D MOV C,A C0Z0M0E0I0 A=7A B=207A D=1349 H=0120 S=0100 P=014E LDA 0307 C0Z0M0E0I0 A=01 B=207A D=1349 H=0120 S=0100 P=0151 MOV B,A C0Z0M0E0I0 A=01 B=017A D=1349 H=0120 S=0100 P=0152 MVI A,09 C0Z0M0E0I0 A=09 B=017A D=1349 H=0120 S=0100 P=0154 SUB B C0Z0M0E0I0 A=08 B=017A D=1349 H=0120 S=0100 P=0155 MOV B,A C0Z0M0E0I0 A=08 B=087A D=1349 H=0120 S=0100 P=0156 MOV A,C C0Z0M0E0I0 A=7A B=087A D=1349 H=0120 S=0100 P=0157 ADD E C0Z0M1E1I1 A=C3 B=087A D=1349 H=0120 S=0100 P=0158 DAA C1Z0M0E0I1 A=29 B=087A D=1349 H=0120 S=0100 P=0159 MOV E,A C1Z0M0E0I1 A=29 B=087A D=1329 H=0120 S=0100 P=015A MOV A,B C1Z0M0E0I1 A=08 B=087A D=1329 H=0120 S=0100 P=015B ADC D C0Z0M0E0I0 A=1C B=087A D=1329 H=0120 S=0100 P=015C DAA C0Z0M0E1I1 A=22 B=087A D=1329 H=0120 S=0100 P=015D ANI 0F C0Z0M0E0I1 A=02 B=087A D=1329 H=0120 S=0100 P=015F MOV D,A C0Z0M0E0I1 A=02 B=087A D=0229 H=0120 S=0100 P=0160 HLT PRN-код: 0100 ORG 100H 0100 219307 LXI H,793H ;заносимо числа в память 300Н-307Н 0103 220003 SHLD 300H 0106 212405 LXI H,524H 0109 220203 SHLD 302H 010C 218000 LXI H,80H 010F 220403 SHLD 304H 0112 212001 LXI H,120H 0115 220603 SHLD 306H 0118 3A0203 LDA 302H ; шукаємо доповнюючий код до числа 524 011B 47 MOV B,A 011C 3E99 MVI A,99H 011E 90 SUB B 011F 37 STC 0120 CE00 ACI 0 0122 5F MOV E,A 0123 3A0303 LDA 303H 0126 47 MOV B,A 0127 3E09 MVI A,9H 0129 90 SUB B 012A 57 MOV D,A 012B 3A0003 LDA 300H ;завантажуємо 793 і додаємо доповнюючий 012E 83 ADD E ;числа 524 012F 27 DAA 0130 5F MOV E,A 0131 3A0103 LDA 301H 0134 8A ADC D 0135 27 DAA 0136 57 MOV D,A 0137 3A0403 LDA 304H ; до результату додаємо число 80 013A 83 ADD E 013B 27 DAA 013C 5F MOV E,A 013D 3A0503 LDA 305H 0140 8A ADC D 0141 27 DAA 0142 57 MOV D,A 0143 3A0603 LDA 306H ;знаходимо доповнюючий код до числа 120 0146 47 MOV B,A 0147 3E99 MVI A,99H 0149 90 SUB B 014A 37 STC 014B CE00 ACI 0 014D 4F MOV C,A 014E 3A0703 LDA 307H 0151 47 MOV B,A 0152 3E09 MVI A,9H 0154 90 SUB B 0155 47 MOV B,A 0156 79 MOV A,C 0157 83 ADD E ;додаємо до результату доповнюючий код 0158 27 DAA ;числа 120 0159 5F MOV E,A 015A 78 MOV A,B 015B 8A ADC D 015C 27 DAA 015D E60F ANI 00001111B 015F 57 MOV D,A 0160 76 HLT Карта пам’яті Висновок: на даній лабораторній роботі я вивчила алгоритми виконання операцій додавання та віднімання двійково-десяткових чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набути практичних навиків складання та налагоджування програм з використанням цих алгоритмів
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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