МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
з лабораторної роботи № 9
“АРИФМЕТИЧНІ ОПЕРАЦІЇ МІКРОПРОЦЕСОРА Intel 8086(80286)”
Виконала:
студентка гр. КН 3
Львів 2003
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
з лабораторної роботи № 9
“АРИФМЕТИЧНІ ОПЕРАЦІЇ МІКРОПРОЦЕСОРА Intel 8086(80286)”
Виконав:
студент гр. КН-37
Данчук Є.С.
Перевірив:
Герус В.А.
Львів 2003
МЕТА РОБОТИ
Вивчити основні арифметичні операції мікропроцесора Intel 8086(80286).
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Арифметичні операції додавання та віднімання проводять за допомогою команд ADD та SUB. Нижче наведені можливі ситуації додавання та віднімання.
ADD AL, BL регістр +регістр
ADD AL, BYTEA регістр +пам'ять
ADD BYTEA, BL пам'ять +регістр
ADD AX, 2010H регістр +безпосередні дані
ADD WORDA, 2030H пам'ять +безпосередні дані
SUB АХ, ВХ регістр-регістр
SUB AX, WORDA регістр-пам'ять
SUB WORDA, BX пам'ять-регістр
SUB BL, 10H регістр-безпосередні дані
SUB WORDA, 200H пам'ять-безпосередні дані
де: BYTEA - ім'я константи в пам'яті типу байт,
WORDA - ім'я константи в пам'яті типу слово.
У випадку, коли проводиться багатобайтове додавання чи віднімання, використовують додавання з переносом ADC та команду віднімання з позикою SBB. їх форма запису аналогічна до команд ADD і SUB.
Особливу увагу необхідно звернути на переповнення, яке може відбутися при використанні вище наведених команд. Для прикладу, результат сумування в регістрі AL може перевищити його ємність і автоматично не переходить в регістр АН. Запобігти такій ситуації можна у випадку проведення сумування в двобайтових регістрах. Щоб перетворити байт у слово використовують команду CBW. Для прикладу:
CBW ; розширити AL до АХ
ADD AX.40H ; додати до АХ
Аналогічна ситуація може відбутися і при додаванні двох двобайтових слів, які обмежені значенням від -32768 до +32768.
На відміну від асемблера МП КР580ВМ8080А в асемблері мікропроцесора Intel 8086(80286) присутні команди множення. Множення для беззнакових даних виконується командою MUL, а для знакових - IMUL. Існує дві основні операції множення:
Множення байт на байт. Перший множник міститься в регістрі AL, а другий - в байті пам'яті чи однобайтовому регістрі. Результат операції заноситься в регістр АХ. Приклад:
MUL BL
MUL BYTE A
Дані, які до виконання множення були в регістровій парі АХ, не зберігаються.
Множення слова на слово. Перший множник міститься в регістрі АХ, а другий - в слові пам'яті чи в регістрі. Після проведення операції, результат заноситься у подвійне слово, зокрема: старша(ліва) частина множення міститься в регістрі DX, а молодша (права) частина - в регістрі АХ. Для прикладу приведемо множення регістр на регістр та регістр на пам'ять:
MUL BX
MUL WORDA
На практиці зустрічається ряд нестандартних ситуацій множення. Зокрема, множення на степінь 2. (2,4,8 і т.д.), множення константи розміром байт на константу розміром слово та множення багатобайтових слів. У першому випадку ефективніше організовувати алгоритм множення через зсув вліво на необхідну кількість бітів. При множенні байта на слово, необхідно, за допомогою команди CBW, переписати константу тішу байт в слово і лише після цього проводити стандартне множення. Множення великих чисел потребує додаткових дій. Один зі шляхів отримання результату такого множення передбачає множення кожного слова окремо, а потім сумування отриманих результатів.
При побудові асемблерних програм для перемноження багатобайтових констант використовується аналогічний алгоритм. Іншою асемблерною командою МП Intel 8086(80286), яка відсутня в асемблері МП КР580ВН80А, є ділення. Цю операцію можна реалізувати командою DIV для беззнакових даних та ID1V для знакових. Існує дві основні операції ділення:
Ділення слова на байт. Ділене міститься в регістрі ЛХ, а дільник - в байті пам'яті чи в однобайтовому регістрі. Після ділення залишок отримується в регістрі АН, а частка - в AL.
Ділення подвійного слова на слово. Ділене міститься в регістровій парі DX:AX, а дільник - в слові пам'яті чи в регістрі. Після ділення залишок отримуємо в регістрі DX, а частка - в АХ. Наведемо ряд прикладів:
DIV BYTEA
DIV BX
IDIV CL
IDIV WORD2
У першому та четвертому прикладах дільник міститься в пам'яті, а в другому та третьому -у регістрах. Результати в АХ, DX:AX, AX та DX:AX відповідно.
Дані, які вводяться з клавіатури представлені в ASCII-форматі. Хоча ASCII- коди зручні для відображення на дисплеї та друку, вони потребують спеціальних перетворень в двійковий формат для арифметичних обрахунків. Так, після сумування в ASCII- форматі необхідно провести корекцію результату командою ААА. Команда ААА коректує вміст регістра АХ а перевіряє праву шістнадцяткову цифру (4 біти) в регістрі AL. Якщо ця цифра знаходиться між А і F або прапорець AF рівний 1, то до регістра AL додається 6, а до регістра AН-1, - прапорці F та CF встановлюються в 1.
В усіх випадках команда ААА встановлює в 0 ліву шістнадцяткову цифру в регістрі AL. Для додавання та віднімання даних в ASCII- форматі використовуються стандартні команди додавання та віднімання.
Віднімання даних в ASCII- коді потребує корекції командою AAS. Ця команда коректує вміст регістра АХ та перевіряє праву шістнадцяткову цифру (4 біти) в регістрі AL. Якщо ця цифра знаходиться між А і F або прапорець AF дорівнює 1, то з регістра AL віднімається б, а з регістра АН -1 , прапорці AF та CF встановлюються в 1. В усіх випадках команда AAS встановлює в 0 ліву шістнадцяткову цифру в регістрі AL. Розглянемо два приклади для додавання та віднімання даних в ASCII-форматі. У першому прикладі розглянемо додавання чисел 7 та 5 в ASCII-форматі. Шістнадцяткове представлення цих цифр 37 та 35, відповідно. Отже:
MOV CL,35H
MOV AL,37H
MOV AH,OO очистити регістр АН
ADD AL,CL додати 37 до 35
ААА корекція для ASCII- кодів
OR AX,3030H результат 3132
В результаті після сумування отримаємо в регістрі АХ - 006С, а після корекції - 0102. Для отримання кінцевого ASCII- представлення достатньо поставити трійки на місце лівих шістнадцяткових цифр. У другому прикладі обчислюється різниця між числами 34Н та 48Н:
MOV AH,OO
MOV AH,OO
MOV AL,34H
SUB AL,38H
AAS
Після третього оператора в регістрі АХ отримаємо значення OOFC та одиницю в AF. Тому, команда AAS віднімає 6 від регістра AL та 1 від регістра АН і встановлює в 1 прапорці AF і CF. Результат, який має дорівнювати -4, має представлення FF06, тобто десяткове доповнення числа -4.
Множення та ділення в ASCII- форматі проводиться стандартними командами (MUL,DIV), але потребує корекції. Для множення використовується коректуюча команда ААМ, а для ділення - AAD. Коректується цими командами вміст регістра АХ. Команда ААМ ділить вміст регістра AL на 10 (ОАН) і записує частку в регістр АН, а залишок в AL.
Над числами в BCD- форматі можна проводити операції додавання та віднімання, але, як над арифметичними операціями в ASCII-форматі, необхідно проводити корекцію результату. Для корегування додавання використовують команди DAA, а для віднімання - DAS. Корекція проводиться над вмістом регістра АХ.
ЗАВДАННЯ
EMBED Equation.3
КОД ПРОГРАМИ