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

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

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

Рік:
2006
Тип роботи:
Інші
Предмет:
Інформаційна безпека

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет "Львівська політехніка" ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ І ФУНКЦІОНАЛЬНИХ ПЕРЕТВОРЕНЬ ІНСТРУКЦІЯ ДО ЛАБОРАТОРНОЇ РОБОТИ № 4 З КУРСУ "МІКРОПРОЦЕСОРНІ ПРИСТРОЇ" для студентів базового напряму 6.160100 “Інформаційна безпека” Затверджено на засіданні кафедри "Автоматика та телемеханіка" Протокол №6 від 30.11.1999р. ЛЬВІВ 2006 Виконання арифметичних операцій і функціональних перетворень. Інструкція до лабораторної роботи № 4 з курсу "Мікропроцесорні пристрої" для студентів базового напряму 6.160100 “Інформаційна безпека”. /Укл. І. М. Бучма, А. Й. Наконечний.- Львів: НУЛП, 2006.- 13 с. Укладачі: І. М. Бучма, канд. техн. наук, доц., А. Й. Наконечний, канд. техн. наук, доц. Відповідальний за випуск І. М. Ковела, канд. техн. наук, доц. Рецензенти: З. Р. Мичуда, канд. техн. наук, доц. М. В. Наконечний, канд. техн. наук, доц. Мета роботи – вивчення способів організації підпрограм виконання арифметичних операцій; дослідити програми виконання арифметичних операцій і функціональних перетворень. І. ТЕОРЕТИЧНІ ПОЛОЖЕННЯ 1.1. Виконання арифметичних операцій Під час програмування мікроЕОМ на МП КР580ІК80А розповсюджений спосіб представлення чисел з фіксованою комою. Це пов’язано з відсутністю спеціальних команд, які б дозволяли працювати на МП КР580ІК80А з числами з плаваючою комою. Двійкове 8-розрядне число з фіксованою комою можна інтерпретувати наступним чином: а) як число зі знаком в доповняльному коді. Старший біт числа при цьому вважається знаковим і кодується 0 для додатних чисел і 1 – для від’ємних. Решта сім розрядів вказують величину числа. Діапазон зміни чисел становить +127…-128: +12710 = 0111 11112 = 7F16 010 = 0000 00002 = 0016 -12710 = 1111 11112 = FF16 -12810 = 1000 00002 = 8016 б) як ціле додатне число без знаку в прямому коді. В цьому випадку числа змінюються в діапазоні від 0 до 255: 010 = 0000 00002 = 0016 +25510 = 1111 11112 = FF16 в) як дворозрядне число в двійково-десятковому – BINARY-CODED-DECIMAL (BCD). При цьому кожен байт розглядається як два пів байти – дві тетради, кожна з яких кодує десяткову цифру. Старші розряди D7…D4 визначають старший двійково-десятковий розряд, а молодші D3…D0 – молодший. Діапазон зміни числа від 0 до 99: 010 = 0000 00002 = 0016 +9910 = 1001 10012 = 9916 Виконання арифметичних операцій додавання, віднімання, множення, ділення, обчислення спеціальних функцій розглянемо на прикладах відповідних програм. 1.2.1. Додавання і віднімання чисел Розглянемо програму 1 додавання масиву однобайтних чисел з отриманням двобайтового результату (програма 1 – MAIN). Доданки повинні бути розташовані в послідовних адресах пам’яті. Програма використовує підпрограму ADDB, вхідними параметрами якої є адреса першого доданку 8300, записана в парі HL, і число доданків 05, записане в регістрі В. Вихідний параметр програми MAIN – сума, старший байт якої записаний в регістрі D, а молодший – в регістрі Е. Алгоритм програми додавання полягає в тому, що після додавання кожного елементу масиву визначається переповнення акумулятора (розряд С=1), і якщо це має місце, то вміст регістра D збільшується на 1. Таким чином, за рахунок сумування одиниць переносу одержується старший байт. Схема алгоритму підпрограми додавання масиву однобайтних чисел зображена на рис. 1.  Рис. 1. Схема алгоритму додавання масиву однобайтових чисел Програма 1 Адреса Машинний код Мітка Мнемокод Коментар  8200 210083 MAIN LXI H, 8300 Записати в пару HL адресу першого доданку 8300.  8203 0605  MVI B, 05 Записати в регістр В кількість доданків.  8205 CD0982  CALL ADDB Виклик підпрограми додавання.  8208 76  HLT Зупинити виконання програми.  8209 AF ADDB XRA A Очистити акумулятор.  820А 57  MOV D, A Очистити лічильник переносів.  820В 86 CNT ADD M Додати до вмісту акумулятора число з масиву доданків.  820С D21082  JNC TRM Якщо переносу немає, то перейти на TRM.  820F 14  INR D Збільшити вміст регістра D на 1.  8210 23 TRM INX H Вказати на наступну адресу доданку.  8211 05  DCR B Зменшити вміст лічильника доданків.  8212 C20B82  JNZ CNT Якщо не всі доданки, то перейти на CNT.  8215 5F  MOV E, A Переслати молодший байт суми в регістр Е.  8216 C9  RET Повернення з підпрограми.   МП може виконувати арифметичні операції з числами з подвійною і більше довжиною машинного слова. Так як МП КР580ІК80А має 8-розрядний АЛП, операції з такими числами повинні здійснюватись по байтам, починаючи з молодших байтів. Так, операція додавання чисел 17F5 + 3411 буде здійснюватися в наступному вигляді: Старший байт Прапорець С Молодший байт Числа 00010111 11110101 175F 00110100 00010001 3411 1 1 01001100 00000110 4C06 Операція віднімання чисел 6F5C – 13C5 буде виконуватись в такому вигляді: Старший байт Прапорець С Молодший байт Числа 01101111 01011100 6F5C 00010011 11000101 13C5 1 1 01011011 00000110 5B97 З приведених вище прикладів видно, що при додаванні (відніманні) молодших байтів чисел необхідно застосовувати команду ADD (SUB), а для додавання (віднімання) решти – команду ADC (SBB), яка буде враховувати стан прапорця С регістра ознак результату. Розглянемо підпрограму 1, яка реалізує віднімання чисел, які мають однакову довжину. Вхідні параметри підпрограми: регістр С – довжина чисел в байтах; пара HL – адреса молодшого байту від’ємника; пара DE – адреса молодшого байту зменшуваного. Кожне число записується в послідовних адресах пам’яті, починаючи з молодших байтів. Результат заноситься в область пам’яті, відведеної під від’ємник. Підпрограма 1 Адреса Машинний код Мітка Мнемокод Коментар  8400 AF SBN XRA A Очистити акумулятор і прапорець С.  8401 1A CNT LDAX D Записати в акумулятор зменшуване.  8402 9E  SBB M Відняти з вмісту акумулятора від’ємник.  8403 77  MOV M, A Записати різницю на місце від’ємника.  8404 23  INX H Вказати на наступний байт від’ємника.  8405 13  INX D Вказати на наступний байт зменшуваного.  8406 0D  DCR C Зменшити вміст лічильника довжини.  8407 C20184  JNC CNT Якщо не останній (старший) байт, то перейти на CNT.  840А C9  RET Повернення.   Якщо була позика, то прапорець С регістра F встановиться в одиницю. Після виконання програми результат записаний на місці від’ємника (пара HL), а знак результату визначається по прапорцю С регістра F. 1.2.2. Множення чисел Існує декілька алгоритмів множення чисел. В першому алгоритмі множення можна замінити багатократним додаванням, наприклад 14 * 3 = 14 + 14 + 14. Недолік алгоритму – значна тривалість процесу обчислення. При другому алгоритмі множення здійснюється в стовпчик. Цей алгоритм застосовується також і для множення двійкових чисел, наприклад: 0110 = 610 0011 = 310 0110 0110 0000 0000 10010 = 1810 При обчислені результату за другим алгоритмом необхідно здійснювати багатократне сумування з зсувом вліво множеного при одночасній перевірці вмісту розрядів множника починаючи зі сторони його молодших розрядів. Якщо в черговому розряді множника записана одиниця, то множене додається до суми і зсувається вліво на один розряд, а якщо в розряді нуль, то відбудеться тільки зсув множеного. Зсув множеного можна замінити зсувом суми вправо. По цьому алгоритму (рис. 2) працює підпрограма 3 множення двох однобайтних чисел з отриманням двохбайтного результату. Початкова адреса підпрограми 8440. Вхідні параметри: D – множене; регістр Е – множник. Результат перемноження записується в регістрову пару B.  Рис. 2. Алгоритм множення однобайтних чисел Підпрограма 2 Адреса Машинний код Мітка Мнемокод Коментар  8440 010000 MPL LXI B, 0000 Очистити вміст регістрів В, С.  8443 3E01  MVI A, 01 Завантажити в акумулятор вказівник розряду.  8445 A7  ANA A Очистити прапорець С.  8446 F5 MPL1 PUSH PSW Зберегти вказівник розряду в стеці.  8447 A3  ANA E Перевірити вміст чергового розряду множника.  8448 78  MOV A, B Завантажити в акумулятор старший байт суми.  8449 CA4D84  JZ MPL2 Якщо в черговому розряді нуль, то перейти на MPL2.  844C 82  ADD D Якщо в черговому розряді 1, то додати множене до суми.  844D 1F MPL2 RAR Зсунути суму вправо (молодший біт  С).  844E 47  MOV B, A Зберегти вміст акумулятора в регістрі В.  844F 79  MOV A, C Завантажити в акумулятор молодший байт суми.  8450 1F  RAR Зсунути число в акумуляторі вправо (С  старший біт).  8451 4F  MOV C, A Зберегти вміст акумулятора в регістрі С.  8452 F1  POP PSW Отримати зі стеку вказівник розряду.  8453 17  RAL Вказати на наступний розряд.  8454 D24684  JNC MPL1 Якщо розряд не останній, перейти на MPL1.  8457 C9  RET Повернення.   1.2.3. Ділення чисел Ділення двійкових чисел, як і чисел, представлених в будь-якій іншій системі числення, базується на послідовному відніманні дільника з діленого і залишків від ділення. Проте двійкове ділення реалізується простіше, так як використання тільки двох цифр (0 і 1) виключає в кожному циклі ділення необхідність визначення числа дільників, які містяться в біжучому значені діленого або залишку (достатньо тільки порівняти їх). Схема алгоритму програми ділення двох 8-розрядних чисел зображена на рис. 3. Програма DIVB використовує цей алгоритм (програма 2). Вхідні параметри цієї програми – ділене (в регістрі Е) і дільник (в регістрі D), вихідні – частка (в регістрі Н) і залишок (в регістрі С). Програма 2 Адреса Машинний код Мітка Мнемокод Коментар  8480 210800 DIVB LXI H, 0008 Завантажити лічильник бітів (регістр L), і очистити регістр частки H.  8483 0E00  MVI C, 00 Очистити регістр проміжного діленого.  8485 7B MXTB MOV A, E Завантажити ділене в акумулятор.  8486 17  RAL Зсунути старший біт в розряд С.  8487 5F  MOV E, A Повернути ділене в регістр Е.  8488 79  MOV A, C Завантажити в акумулятор проміжне ділене з регістру С.  8489 17  RAL Зсунути розряд С в молодший біт.  848A 92  SUB D Відняти з вмісту акумулятора дільник.  848B D28F84  JNC NOADD Якщо С=0, то перейти на NOADD.  848E 82  ADD D Якщо С=1, відновити вміст акумулятора.  848F 4F NOADD MOV C, A Повернути проміжне ділене в акумулятор.  8490 3F  CMC Інвертувати розряд С.  8491 7C  MOV A, H Завантажити в акумулятор частку з регістру Н.  8492 17  RAL Зсунути розряд С в молодший біт регістра частки.  8493 67  MOV H, A Переслати частку в регістр Н.  8494 2D  DCR L Зменшити на 1 вміст лічильника бітів (регістр L).  8495 C28584  JNZ MXTB Якщо вміст регістра L не рівний 0, продовжувати.  8498 76  HLT Зупин.    Рис. 3. Схема алгоритму програми ділення двох 8-розрядних чисел 1.2.4. Обчислення спеціальних функцій Для обчислення спеціальних функцій (наприклад, Х2) застосовуються спеціальні алгоритми. Для обчислення функції Х2 можна застосувати алгоритм, оснований на тому, що квадрат числа можна найти додаванням послідовності непарних чисел. Число Сума непарних чисел Результат 1 1 = 1 2 1+3 = 22 3 1+3+5 = 32 4 1+3+5+7 = 42 5 1+3+5+7+9 = 52 З наведеного прикладу видно наступне: яке число потрібно піднести до квадрату, таку ж кількість послідовних непарних чисел, починаючи з 1, потрібно додати. Обчислення функції Х2 за наведеним алгоритмом займає багато часу. Тому якщо ставляться жорсткі вимоги по швидкодії і точності, застосовується обчислення функцій з допомогою таблиць. Розглянемо застосування цього методу на прикладі обчислення квадрату числа Х (програма 3). Програма 3 (SQ) визначає квадрат чисел від 0 до 10 включно. Вхідний параметр програми – число Х – записується в регістр L, вихідний параметр – значення Х2 – в регістр Н. Програма 3 Адреса Машинний код Мітка Мнемокод Коментар  8500 2600 SQ MVI H, 00 Очистити регістр Н.  8502 110086  LXI D, 8600 Завантажити початкову адресу таблиці.  8505 19  DAD D Отримати адресу елементу.  8506 66  MOV H, M Завантажити елемент в регістр Н.  8507 76  HLT Зупин.  8600 00 SQTB 00 Таблиця квадратів чисел  8601 01  01   8602 04  04   8603 09  09   8604 19  19   8605 24  24   8606 31  31   8607 40  40   8608 51  51   8609 64  64   860А      2. Завдання 2.1. Завдання для домашньої підготовки: 2.1. Вивчити підпрограми 1-2 і програми 1-3. Розглянути результати виконання програм на конкретних числових прикладах. 2.2. Розробити програму додавання двох 8 розрядних чисел з отриманням результату в двійково-десятковому коді. 2.2. Виконати в лабораторії 2.2.1. Дослідити програму 1 додавання однобайтних чисел з отриманням двохбайтного результату. 2.2.2. Дослідити підпрограму 2 віднімання двох чисел, які мають однакову довжину. 2.2.3. Дослідити підпрограму 3 множення двох 8-розрядних чисел з отриманням 16-розрядного результату. 2.2.4. Дослідити програму 2 ділення двох 8-розрядних чисел. 2.2.5. Дослідити програму 3 обчислення квадрату числа з допомогою таблиці. 2.2.6. Дослідити розроблену при домашній підготовці програму додавання двох 8-розрядних чисел з отриманням результату в двійково-десятковому коді. 3. Зміст звіту 1) Повний перелік арифметичних команд. 2) Програма додавання двох 8-розрядних чисел з отриманням результату в двійково-десятковому коді, розробленої в п. 2. 3) Програми 1-3 і підпрограми 1-2, досліджені в п. 2.2.1-2.2.5 з результатами виконання арифметичних операцій. 4) Порівняльний аналіз отриманих результатів з очікуваними. 5) Висновки по роботі. 4. Контрольні запитання 1. Які команди арифметичних операцій може виконувати МП КР580ІК80А. 2. На чому базується алгоритм роботи підпрограми 2 множення чисел? 3. На чому базується алгоритм роботи програми 3 ділення чисел? 4. Переваги обчислення функцій заданих у вигляді таблиці ? 5. Представте числа від 0 до 20 в двійково-десятковому коді. 6. Як можна інтерпретувати 8-розрядне число з фіксованою комою? 7. Дії, які виконуються будь-якою командою програм 1-3 і підпрограм 1-2. Навіщо ці дії необхідні ? Література 1. Горбунов В.Л., Панфилов Д. И. Микропроцессоры. Лабораторный практикум.-М.: Высшая школа.-1984.-с.103. 2. Самофалов К. Г. , Викторов О. В., Кузняк А. К. Микропроцессоры. - К.: Техніка, 1986. - 278с. 3. Циделко В. Д., Нагаец Н. В., Хохлов Ю. В. и др. Проектирование микропроцессорных измерительных приборов и систем. – К.: Техника, 1984. – 215 с. 4. Коффрон Дж. Технические средства микропроцессорных систем. - М.: Мир, 1983. - 344с. 5. Каган Б.М., Сташин В.В. Основы проектирования микропроцессорных устройств автоматики. - М.: Энергоатомиздат. - 1983. - с.304. Навчальне видання ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ І ФУНКЦІОНАЛЬНИХ ПЕРЕТВОРЕНЬ Інструкція до лабораторної роботи № 4 з курсу "МІКРОПРОЦЕСОРНІ ПРИСТРОЇ" для студентів базового напряму 6.160100 “Інформаційна безпека”
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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