Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LR3

.docx
Скачиваний:
17
Добавлен:
12.03.2016
Размер:
350 Кб
Скачать

Лабораторна робота №3

Тема: Арифметичні команди МП 8086

Цілі: Навчитися виконувати розрахунки на мові Асемблер з використанням арифметичних команд.

Хід роботи:

1 Короткі теоретичні відомості

1.1 Основні арифметичні команди

Арифметичні команди можуть виконуватися над цілими двійковими та десятковими числами. Цілі двійкові числа можуть бути представлені байтом, словом або подвійним словом. Старший розряд служить ознакою знака числа (7, 15 та 31 біти). Арифметичні команди можливо описати групами, які представлені в табл. 1

Таблиця 1 - Основні арифметичні команди

1.2 Операції додавання та віднімання

Команди додавання дозволяють виконувати наступні дії: просте додавання (ADD) та з урахуванням вмісту прапора перенесення (ADC). Команда містить два операнди розмірністю байт або слово: "приймач" та "джерело". Результат операції буде записано в перший операнд (приймач), а другий залишиться незмінним.

Структура команд додавання:

add приймач, джерело – проста команда додавання;

adc приймач, джерело – додавання з урахуванням вмісту прапора перенесення CF.

Команда ADC використовується в тому випадку, коли потрібно знайти суму чисел розмірністю більшою, ніж слово. Послідовно виконується додавання молодшої частини даних за допомогою команди ADD, а потім старшої частини за допомогою команді ADC. При виникненні переповнення розрядної сітки під час додавання молодшої частини, в прапор перенесення CF записується одиниця. Значення вмісту прапора додається до одержаної суми при виконанні команди ADC. Таким чином враховується перенесення з молодших розрядів у старші від попередньої дії.

Арифметичні команди віднімання дозволяють виконувати наступні дії: просте віднімання (SUB) та з урахуванням стану прапора переносу (SBB).

Команди містять два операнди і з першого віднімається другий. Результат операції буде записано в перший операнд, а другий залишиться незмінним. Зазвичай використовується команда простого віднімання. У результаті виконання команди з можливим виникненням позики зі старших розрядів, потрібно використовувати команду віднімання з урахуванням вмісту прапора CF.

Команди віднімання мають наступну структуру:

sub операнд_1, операнд_2 ; просте віднімання;

sbb операнд_1,операнд_2 ; віднімання з урахуванням позики.

1.3 Зміна значення на одиницю та зміні знаку операнда

Часто потрібно змінити деякий вираз на одиницю, який може знаходитися в регістрі або в пам'яті. Для цього використовуються команди зменшення операнда на одиницю (DEC) або збільшення -- (INC):

dec операнд

inc операнд

Для зміни знаку операнда використовується команда NEG, яка формує двійкове доповнення операнда, що знаходиться в пам'яті або регістрі. 26 Операція виконується інвертуванням усіх розрядів операнда з наступним додаванням до двійкової одиниці. Команда виконує операцію віднімання (0 – джерело):

neg джерело

1.4 Порівняння операндів

Для порівняння даних використовується спеціальна команда CMP, яка має наступну структуру:

cmp операнд_1, операнд_2

Порівняння виконується методом віднімання (операнд_1-операнд_2), при цьому значення операндів не змінюються, а тільки змінюється стан окремих прапорів. Аналізуючи стан прапорів за допомогою спеціальних команд, можна сформувати результати порівняння. Залежно від результатів виконання команди, значення прапорів представлені в табл. 2.

Таблиця 2 - Визначення результатів порівняння за станом прапорів

1.5 Множення та ділення

Для виконання операції множення використовується дві команди: множення без урахування знака MUL та множення операндів зі знаком IMUL.

Команда множення має наступну структуру:

mul множник_1

та

imul множник_1

Виконання операції IMUL та розміщення операндів і результату не відрізняються від операції MUL.

Один зі співмножників знаходиться в команді і може бути розміщений у пам'яті або в регістрі. Місце розташування другого співмножника 27 фіксоване і, залежно від першого співмножника, може знаходитися в регістрах AL або AX (табл. 3). Результат буде розміщено в регістрі AX, якщо перемножуються байти, та в регістровій парі DX_AX при перемноженні слів.

Таблиця 3 - Розміщення операндів та результату для команди множення

Для виконання операції ділення використовуються дві команди: ділення без урахування знака DIV та ділення операндів зі знаком IDIV. Команда ділення має наступну структуру:

div дільник

та

idiv дільник

Дільник розміщується в команді і може займати байт або слово. Ділене задається неявно і його розмір залежить від розміру дільника. Ділене завжди в два рази більше від дільника і може бути розташоване в регістрі AX, якщо дільник має розмір байту, або в парі регістрів DX_AX для розміру дільника в слово. У регістровій парі DX_AX молодша частина діленого перебуває в AX, а старша – в DX.

Після операції ділення частка міститься в регістрах AL або AX, а залишок – в AH або DX відповідно (табл. 4).

Таблиця 4 - Розміщення операндів та результату для операції ділення

При виконанні операції ділення можливе виникнення виняткової ситуації: ділення на нуль. Ця ситуація виникає, коли дільник дорівнює 0 або частка занадто велика для його розміщення в регістрі AL або AX.

1.6 Зміна розмірності операнда

При виконанні арифметичних операцій операнди повинні мати необхідну розмірність. Існують дві команди, які дозволяють перетворити байт у слово та слово в подвійне слово з урахуванням знака: CBW та CWD. Команди перетворення не вказують явно на операнд і мають наступну структуру:

cbw

та

cwd

Для операції перетворення операнд повинен знаходиться в регістрі AL або AX. Результат виконання команди буде розміщено відповідно в регістрі AX або в регістровій парі DX_AX. Перетворення проходить за рахунок копіювання значення старшого біта операнда, який знаходиться в регістрі AL або AX, в старшу частину результату перетворення та записується відповідно в регістри AH або DX. Якщо в регістрах AH або DX знаходиться необхідна інформація, її потрібно заздалегідь переписати в інші регістри або в пам'ять.

Якщо знаковий біт AL = 0, то AH = 00h. Якщо знаковий біт AL = 1, то AH = 0FFh.

2 Виконання завдання

2.1 Завдання

Розробити програму на мові асемблер з лінійною структурою для розв’язку математичного прикладу. Вхідні дані (змінні X й Y) вибрати самостійно таким чином, щоб самі змінні й будь-яке вираження утворене ними були відмінні від 0 й 1.

z = 48/х/у+12*(х-у)

2.2 Лістинг програми

Марченко А. Г.

6.50103.1151.09.ЛР.3

НУК Гр. 1151

Дата

Підпис

№ докум.

Дмитрієв Д.

Викладач

Студент

Зм.

Аркуш

Аркушів

1

Арифметичні команди МП 8086

Арк

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]