Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА общее.doc
Скачиваний:
33
Добавлен:
18.03.2015
Размер:
5.16 Mб
Скачать

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

Тема: ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ.

Ціль роботи: Вивчення способів організації й дослідження підпрограм виконання арифметичних операцій, програмування мовою Асемблера й машинній мові.

Хід роботи.

І. По додатку досліджувати виконання арифметичних команд.

АРИФМЕТИЧНІ КОМАНДИ.

ДОДАВАННЯ.

Основна арифметична функція - це додавання двох чисел.

Команда ADD R додає дані певного регістра й акумулятора й запам'ятовує результат в акумуляторі.

Наприклад, ADD D складає дані регістра D і акумулятора. Покладемо D = 1001 0011 і А=1010 1010, тоді результат буде:

У десятковій системі у двійковій системі

147 1001 0011 D

+ 170 + 1010 1010 А

  1. 10011 1101 А

ПРАПОР ПЕРЕНОСУ.

Помітимо, що в попередньому прикладі результат більше 255 (10), тобто довше восьми біт. Для обліку цього переповнення процесор містить прапор переносу. Цей прапор працює як дев'ятий біт акумулятора й може бути перевірений командами JC (перехід, якщо є перенос) і JNC (перехід, якщо немає переносу). Ця перевірка подібна до перевірки нульового прапору.

Наприклад, програма ADD D; JC 8020 переводить зміст регістра D в акумулятор і переходить на комірка 8020, якщо генерується прапор переносу. Якщо переносу немає (результат менше 256/10), програма триває з наступної команди.

Прапор переносу застосовується також для додавання чисел довше восьми біт. Два (або більше) регістри використовуються для зберігання кожного числа. Спочатку складаються молодші значущі байти, потім старші. Біт переносу виконує функцію зв'язку між двома байтами. Ви можете перевірити прапори, заглянувши в комірку пам'яті 83ЕА. Прапори зібрані в один байт, показаний на малюнку. На цьому кроці використовуються тільки прапори нуля й переносу. Прапор знаку копіює старший значущий біт. Не всі команди змінюють прапори. Команда MOV, наприклад, їх не змінює. Опис команд у додатку показує, які прапори генеруються кожною командою.

S Z X AC X P X C

Перенос

Парність

Додатковий перенос

Нуль

Знак

ВІДНІМАННЯ

Команда SUB R віднімає зміст певного регістра із змісту акумулятора. Наприклад, SUB B віднімає з акумулятора дані регістра В.

Команда вирахування використовує прапор переносу як прапор займу. Якщо прапор переносу встановлюється після команди SUB R, значить число в регістрі R більше, ніж в А.

Проведемо експеримент по виконанню арифметичних команд.

  1. Доповнити машинними кодами програму, наведену в таблиці.

Таблиця 1.

ПРОГРАМА ДЕМОНСТРАЦІЇ АРИФМЕТИЧНИХ КОМАНД.

АДРЕСА

ЗМІСТ

МІТКА

КОМАНДА

КОМЕНТАРІ

SUB B

ADD C

A- B A

A + C A

Ця програма віднімає дані регістра В з акумулятора, а потім додає в акумулятор дані регістра С.

  1. Введіть програму в мікролабораторію. Перейдіть у кроковий режим виконання програм.

  2. Занесіть у регістр А число А7, у регістр У число 23, у регістр Із число 93. Для цього необхідно встановлювати адресу комірки пам'яті, що відповідає даному регістру й записувати туди необхідні дані. Нагадаємо, що вміст регістра А зберігається в комірці 83ЕВ, регістра В - в комірці 83Е9, регістра С - в коміркці 83Е8. При кроковому виконанні програми монітор записує дані із цих комірок у відповідні регістри МП і після виконання кожної команди записує зміст регістрів назад у відповідної комірки.

  3. Встановити початкову адресу програми й натисніть кнопку ПУСК. Команда SUB B повинна виконатися. Перевірте зміст акумулятора, що висвітлюється цифровими індикаторами. Воно повинно дорівнювати А716 - 2316 = 8416. Перевірте зміст флагового регістру. Прапори займу й переносу не встановлені, тому що результат не дорівнює 0 і 2316 < А716.

  4. Натисніть кнопку ВОЗВР. Виконалася команда ADD C. Зміст акумулятора стає рівним 8416+9316=11716. Цей результат не вміщається в акумулятор, у якому залишається код 1716, і формується прапор переносу. Перевірте зміст прапору переносу й переконаєтеся, що він установлений.

  5. Переконаєтеся, що при виконанні цієї програми вміст регістрів У и С не змінилося.