ОПЕРАЦІЇ МНОЖЕННЯ ТА ДІЛЕННЯ ЦІЛИХ БЕЗЗНАКОВИХ І ЦІЛИХ ЗНАКОВИХ ЧИСЕЛ В ОДНОКРИСТАЛЬНОМУ МП КР580.

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР Звіт про виконання лабораторної роботи №5 на тему: “ ОПЕРАЦІЇ МНОЖЕННЯ ТА ДІЛЕННЯ ЦІЛИХ БЕЗЗНАКОВИХ І ЦІЛИХ ЗНАКОВИХ ЧИСЕЛ В ОДНОКРИСТАЛЬНОМУ МП КР580 ” з курсу: “ Комп’ютери та мікропроцесорні системи ” Виконав студент групи КН-3 Львів - 2006 1. МЕТА РОБОТИ Вивчити алгоритми виконання операцій множення та ділення цілих беззнакових і цілих знакових чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А), набути практичних навиків складання та налагоджування програм з використанням цих алгоритмів. 2. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ Набір команд арифметичних операцій чисел для однокристального мікропроцесора Intel 8080 (КР580ВМ80А) не має команди множення або ділення над двома операндами. Тому для реалізації прикладних задач, де необхідно виконати дані арифметичні дії, застосовуються алгоритми що використовують закладений набір команд у МП КР580ВМ80А. 2.1 Арифметична операція множення Найпростіший алгоритм множення цілих двійкових чисел без знака полягає у накопиченні множеного, яке виконується m раз, де m - значення множника. Якщо, наприклад, 8-бітний множник знаходиться в акумуляторі, 8-бітне множене - в регістрі С, а регістри B,Н і L-очищені, тоді подальша програма формує 16-бітний добуток в регістровій парі Н L : MULT_1: DCR A ; Декремент множника JZ EXIT ; Вихід на кінець програми DAD B ; Накопичення множеного JMP MULT_1 ; Повторювати до завершення EXIT: HLT ; Кінець роботи програми. Основний недолік безпосереднього накопичення множника або множеного, що робить його непрактичним, полягагє в недостатньо високій швидкодії виконання операції множення. Більш поширений спосіб грунтується на аналізі розрядів множника представленого у двійковій формі запису з подальшим накопиченням множеного і зсувам проміжних результатів суми або множника. Даний алгоритм ефективніший в порівнянні з безпосереднім накопиченням завдяки можливому зменшенні кількості додавань. Наприклад, а) безпосереднє множення цілих знакових чисел (+3)*(+5), б) множення цілих знакових чисел (-3)*(+5) без накопичення нульових часткових добутків: а) 0011 (+3) б) 1101 (-3) * 0101 *(+5) * 0101 *(+5) 0011 1101 0000 1101 0011 10 0 0 0 1 0000 (-15 в доповнюючому коді) 0001111 Алгоритм множення без накопичення нульових часткових добутків реалізується циклічним процесом, на кожному кроці якого: - аналізується черговий біт множника; - в залежності від його значення відбувається додавання множеного до попередньої суми (біт=1) або не відбувається (біт=0) відбувається додавання множеного до попередньої суми часткових добутків. - відбувається зміна взаємного положення множеного і суми. Добуток n - бітних співмножників має довжину не більше 2n біт. Існують різноманітні варіанти реалізації даного способу, які визначаються тим, починаючи з яких цифр (розрядів) старших чи молодших аналізується множник, і що зсувається - множене чи сума часткових добутків. Наприклад, а) множення (+5)*(+3) без додавання часткових добутків, починаючи з старших розрядів множника, б) множення (-5)*(+3) без додавання часткових добутків, використовуючи зсув суми часткових добутків починаючи з молодших розрядів множника: а) 0101 (+5) б) (-5)*(+3) =(1011)*(0011) * 0011 (+3) 0101 00000000 ; початкова сума 0101 +1011 ; (1) 0001111 10110000  ; зсув суми добутків 11011000 + 1011 ; (1) 110001000  ; зсув суми добутків 11000100  ; зсув (0) 11100010  ; зсув (0) Результат операції множення: (91) 11110001 Використання набору арифметико-логічних команд МП КР580ВМ80А ефективно для реалізації алгоритму множення, в якому множене або сума часткових добутків зсуваються вліво. Зсув вправо і 8-розрядне додавання виконуються тільки в акумуляторі А, а використання команди DAD RP виконує 16-розрядне додавання і її форма DAD H еквівалентна зсуву 16-бітного вмісту реістрової пари HL вліво на один біт з передачею старшого біта в прапорець перенесення. Наведені алгоритми виконують операцію множення для цілих беззнакових чисел. Коли співмножники представлені в доповнюючому коді, тобто маєм виконати добуток над знаковими цілими числами, тоді формально виконання операції множення полягає в реалізації такого правила: - за знаками співмножників утворити і тимчасово зберегти знак добутку; - утворити абсолютні значення співмножників і перемножити їх ; - з врахуванням знака добутку представити результат у доповнюючому коді. Однак, на практиці застосовують спеціальні алгоритми множення знакових чисел. Так, спосіб знакового множення вимагає, щоб множник завжди був додатній. Тоді, в залежності від набору знаків множеного і множника: (+)*(+)=(+) ; множник додатній (-)*(+)=(-) ; множник додатній (+)*(-)=(-) ;множник від'ємний (-)*(-)=(+) ; множник від'ємний виконуєм перетворення множеного і множника у випадках в), г) у доповнюючий код для одержання додатнього множника. Виконання алгоритму знакового множення розглянемо на конкретному прикладі (-13)*(+7): 10011 * 00111 ; починаєм з молодших розрядів 0000000000 ; початкова сума +10011 1001100000  ; зсув суми добутків після кожного додавання 1100110000 +10011 10110010000  ; зсув суми добутків після кожного додавання 1011001000 +10011 10100101000  ; зсув суми добутків після кожного додавання 1010010100  ; зсув без додавання нульовий біт множника 1101001010  ; зсув без додавання нульовий біт множника 1110100101 ; добуток в доповнюючому коді рівнний 91. Найбільш поширеним і ефективним при реалізації множення цілих знакових чисел є алгоритм Бута (Booth's Algorithm). В ньому не враховується значення знаків множеного і множника. В основу визначення добутку покладено правила аналізу переходів від одного розряду множника до наступного, при цьому якщо біти змінюються: - з 0 на 1 виконуєм віднімання множеного від попередньої суми (додаєм, перетворивши множене в доповнюючий код); - з 1 на 0 виконуєм додавання множеного (в даному коді) до попередньої суми. - з 0 на 0 виконуєм зсув вправо з врахуванням вмісту старшого розряду; - з 1 на 1 виконуєм зсув вправо з врахуванням вмісту старшого розряду. Наприклад, 11101 (-3) 1101 (-3) * 00101 * (+5) *1011 * (-5) (-15) (+15) 0000000000 0  0101 0 00000000 1011 0 +00011 (0,1) +0011 (0,1) 0001100000  ; зсув суми 00110000  ; зсув суми 0000110000 00011000  (1,1) +11101 (1,0) 00001100 1111010000  ; зсув суми +1101 (1,0) 1111101000 11011100  ; зсув суми +00011 (0,1) 11101110 0001001000  ; зсув суми +0011 (0,1) 0000100100 100011110  ; зсув суми +11101 (1,0) 00001111 ; результат 1111000100  ; зсув суми 1111100010  ; зсув суми 1111110001 ; результат (-15) Після кожного додавання/віднімання проводим зсув часткової суми на один розряд вправо з врахуванням її значення старшого розряду. Тобто, якщо в старшому розряді біт рівний 0 або 1, то при зсуві вправо в старший розряд записується відповідно аналогічний біт. 2.2 Арифметична операція ділення Операція ділення обернена по відношенню до операції множення і реалізується подібними циклічними діями. Позначимо через X-ділене, Y-дільник і Z=X/Y - частка, вважаючи їх цілими беззнаковивми числами. При діленні цілих чисел прийнято як додатковий результат формувати ще й залишок R. Для операцій ділення є характерним випадок ділення на нуль (Y=0). Найпростіший безпосередній спосіб ділення цілих двійкових чисел без знака полягає у відніманні дільника від діленого з накопиченням доки отриманий залишок буде менший дільника (Y>R). Наприклад, 8-бітне ділене знаходиться в регістрі В, 8-бітний дільник у регістрі D регістр H і C очищені, програма формує 8-бітну частку у регістрі C і залишок в регістрі А: DIV_1: MOV A, D CPI 0h JNZ DIV MVI H, EEh JMP END DIV: MOV A,B CYCLE: SUB D JC L1 INC C JMP CYCLE L1: ADD D END: HLT Основний недолік способу безпосереднього діленяя, який робить його непрактичним, полягає в недостатньо високій швидкодії програми. Простіший варіант виконується за правилом віднімання -зсув. Оскільки частку можна отримати тільки починаючи зі старших розрядів, то можливі випадки використання - зі зсувом залишка вліво і зі зсувом дільника вправою. Другий випадок на практиці не використовується через необхідність мати регістри частки і дільника подвійної довжини. При діленні цілих чисел отримують частку і залишок також у вигляді цілих чисел, причому знак залишку співпадає зі знаком діленого. Коли ділене і дільник представлеені в доповнюючому коді (від'ємні числа), то стандартний прийом виконання операції ділення вимагає: - по знакових бітах діленого і дільника утворити і тимчасово зберегти знак частки Z =X  Y і залишку R; - утворити абсолютні значення діленого і дільника і виконати алгоритм ділення; - з врахуванням знаків частки Z і залишку R представити, при необхідності, результат в доповнюючому коді. Найбільшого застосування знайшли алгоритми ділення з відновленням і без відновлення залишку. Процес ділення за алгоритмом з відновленням залишку виконує циклічно повторювану послідовність дій. В першому повторені циклу - ділене, а в наступних повтореннях циклу - залишок зсуваються на один розряд вліво і після цього з нього віднімається дільник. У випадку, одержаного нового залишку, як додатнє число, то в черговий розряд частки (починаючи зі старшого розряду) записується одиниця (1), в протилежному випадку - в розряд частки записується нуль (0), а до залишку дадається дільник. Тобто, відновлюється попередній зсунутий залишок. Дії повторюються циклічно n раз (n - число розрядів дільника). В результаті отримуєм частку, а останній залишок буде результуючим залишком операції ділення. Алгоритми ділення без відновлення залишку, при від'ємному залишку діленого і дільника, не додає дільник Y для відновлення одержаного залишку. Виключення в алгоритмі операції відновлення залишку зменшує час проходження циклів, однак необхідність в алгоритмі визначення типу належної виконанню операції (додавання або віднімання) нівелює цю перевагу. Крім цього, необхідно в алгоритмі виконувати віднімання при першому проходженні циклу і відновлення кінцевого залишку в останньому цикліпри формуванні частки, що потребує додаткових затрат. Тому при програмній реалізації алгоритму ділення для МПС рекомендують вибирати спосіб обчислення з відновленням залишку. Ділення цілих знакових чисел організується складніше, ніж множення. ЦЕ пояснюється тим, що в залежності від знаків операндів і проміжнихї результатів, по-перше, окремі розряди частки необхідно формувати різними способами, а по-друге, дільник необхідно необхідно або віднімати від залишку діленого, або додавати до нього. Тому рекомендують виконувати попереднє перетворення доповнюючих кодів операндів діленя в прямі коди і після одержання від'ємного результату формувати його прямий код. Постановка лабораторного завдання Занести в пам’ять послідовно числа 35, 10, 5, 12.Виконати попарно операцію множення способом зсувів (35*10, 5*12). Результат записати в пам’ять. Текст програми ORG 100H LXI SP,1110H MVI D, 35 MVI E,10 PUSH D MVI B,5 MVI C,12 PUSH B LDA 110FH MOV E,A LDA 110EH CALL MUL SHLD 1111H LDA 110CH MOV E,A LDA 110DH CALL MUL SHLD 1114H HLT MUL: LXI H,0 MVI D,0 MVI C,8 Z1: DAD H RLC JNC Z2 DAD D Z2: DCR C JNZ Z1 RET  EMBED PBrush   EMBED PBrush  Висновки: виконавши дану лабораторну роботу, я вивчив способи множення та ділення чисел в МП КР 580.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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