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

Іі. Розробити програму.

Скласти й виконати програму, що розраховує наступні вираження:

1

12+ 30-55

Результат помістити в комірку 8030.

2

38-30+5

Результат помістити в комірку 8031. Зрівняти результати.

3

1FF+FE00

Результат помістити в комірку 8020, 8021. Визначите значення прапорів.

ЛІТЕРАТУРА.

1. Опис «Микролаб».

2. Преснухин. Мікропроцесори. Т.3.

ПИТАННЯ ДЛЯ САМОПІДГОТОВКИ.

  1. Які команди ставляться до групи арифметичних команд МП КР 580?

  2. Чим відрізняється виконання команд Скласти й Скласти з урахуванням Переносу, Відняти й Відняти з обліком займу?

  3. Як МП виконує вирахування?

  4. Як виконується команда DAD?

  5. Що таке двійково-десятковий код і десяткова корекція?

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

Тема: ВИКОНАННЯ ЛОГІЧНИХ КОМАНД.

Ціль роботи: Дослідження виконання окремих логічних команд і простих програм; вивчення програмних способів маскування даних; дослідження мікро- ЕОМ як логічного пристрою.

Теоретична частина

Команди маніпулювання з даними MVI, INR, СМА

Однією з основних завдань МП є завантаження акумулятора даними. Це виконується командою MVI А,[дані] /безпосереднє завантаження акумулятора/. Дані, що завантажуються в акумулятор, запам'ятовуються в байті, що слідує за кодом.

Після того, як дані уведені в акумулятор, необхідні команди для роботи з ними. Раніше використовувалися дві команди: INR А /збільшення змісту акумулятора/, СМА /інвертування вмісту акумулятора/ .

Команди перевірки й переходу CPI JZ, JMP

Щоб перевірити вміст акумулятора, використовується команда CPI [дані]/безпосереднє порівняння/. При цьому порівнюються дані, зазначені в другому байті команди, із змістом акумулятора, і, відповідно, установлюються прапори процесора. До тепер використовувався тільки нульовий прапор, що встановлюється, якщо в результаті операції виходить нуль. Команда JZ [адр.]| /перехід, якщо 0/ перевіряє нульовий прапор, попередньо встановлений попередньою командою, такий як CPI, і викликає перехід при встановленому прапорі. Команда безумовного переходу JMP [адр.] викликає перехід незалежно від стану прапора. Адреса переходу обох команд запам'ятовується у двох байтах пам'яті, що випливають за кодом операції.

Команди передачі між акумулятором і пам'яттю LDA, STA

Команди LDA [адр.]/завантаження акумулятора/ і STA [адр.] /запам'ятовування вмісту акумулятора/ передають дані між акумулятором і пам'яттю. Адреса комірки пам'яті вказується у двох байтах, що випливають за операційним кодом.

Команди зв'язку з підпрограмою CALL, RET

Для використання підпрограм потрібно дві команди. CALL [адр.] використовується для переходу до підпрограми, a RET /повернення/ використовується для закінчення підпрограми. Команда CALL указує адресу так само, як команда переходу. Команда RET не вказує адреси, але викликає перехід до команди, що випливає за попередньо виконаною командою CALL.

Команди керування перериванням El , DI

Команда EI /дозвіл переривань/ дозволяє обрані переривання. Команда D1 /заборона переривань/ забороняє всі переривання.

Щодо невеликого набору команд, перерахованих вище, характеризує основні можливості МП КР580ИК80. Однак система команд цього МП включає значно біль шиї число команд, що полегшує написання програм. Аналогічно при конструюванні апаратної частини можна здійснити будь-який логічний ланцюг при використанні вентилів І-НЕ. Однак апаратна частина спрощується з використанням таких пристроїв, як вентилі АБО-НЕ, тригери, мультиплексори, лічильники й суматори.

Рисунок 1. Структурна схема МП КР580ИК80

РЕГІСТРИ ЗАГАЛЬНОГО ПРИЗНАЧЕННЯ

У МП КР580ИК80 є шість ( 8-розрядних регістрів, які використовуються для тимчасового запам'ятовування даних. На мал.1 показана структурна схема МП КР580ИК80, що включає ці регістри /B,C,D,E,H і L/ і регістр - покажчик стеку.

Для використання цих регістрів необхідні деякі нові команди. Команда MVI , що завантажує дані в акумулятор, може бути використана з будь-яким регістром. Наприклад, MVI D [дані] забезпечує запис даних у регістр D. Загальною формою запису цієї команди є MVI r, [дані] , де r - будь-який регістр /А, В, G, D, Е, Н, L/. Хоча акумулятор є спеціальним у змісті використання для результатів обчислень, він також може бути використаний як регістр загального призначення.

Команда INR також може бути використана з будь-яким регістром. Загальною формою запису є INR r. Наприклад, INR H нарощує вміст регістра Н.

Дані можна переміщати з одного регістра в іншій. Це виконується командою MOV r1, r2.Регістр r1 є мостом призначення, а r2 - джерелом. Наприклад, MOV А, Н переносить уміст регістра Н у акумулятор, але вміст регістра Н не міняється.

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

НАБІР КОМАНД МІКРОПРОЦЕСОРА КР580ИК80

ЛОГІЧНІ КОМАНДИ

В основі побудови цифрових схем лежить логічний вентиль, а найбільше широко використовуються чотири базові функції вентиля: "НЕ", "И", "АБО", " ЩоВиключає АБО". Кожна із цих функцій може бути реалізована програмним способом.

Функцію "НЕ" виконує команда СМА /доповнення акумулятора/. Кожний біт акумулятора після виконання цієї команди інвертується.

Функцію "І" виконує команда ANA R. Символ R позначає або один з регістрів, або комірку пам'яті. Наприклад, ANA D викликає об'єднання по "І" змісту регістра D і акумулятора. Результат залишається в акумуляторі, зміст регістра /у нашім прикладі D/ не змінюється. Операція з якимось певним регістром має свій код.

Рис.2 показує апаратний еквівалент команди ANA R. Функція "І" виконується індивідуально для кожного біта акумулятора.

Рис.2. Апаратний еквівалент команди

Наприклад, якщо А=1011 ВОНО й D=0011 1100, результатом команди ANA D буде:

0011 1100 - D

І 1011 0110 - А

0011 0100 - А

Функцію "АБО" виконує команда ORA R /об'єднання по "АБО" акумулятора й регістра R/

Функцію " Що Виключає АБО" виконує команда XRA R. Виконання цих команд подібно виконанню ANA R, тільки реалізуються інші логічні функції. Оскільки адреса або дані визначати не потрібно, те всі ці команди вимагають тільки один байт коду операції /див.набір команд МП КР580ИК80/.

Для ілюстрації дії логічних команд проведемо наступний експеримент: будемо вводити дані з перемикачів вхідного порту, потім ці дані перетворяться логічними командами, і результат висвітиться на світлодіодних індикаторах вихідного порту. Тому що мікролабораторія має тільки три перемикачі вхідного порту, ми будемо спостерігати тільки за трьома молодшими розрядами байта даних /див. схему/.

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

Таблиця 1 Програма, що демонструє дію логічних команд

Адреса

Зміст

Мітка

Команда

Коментарі

8000

* * * *

MVI А, 81

Програмування інтерфейсу

8001

* * * *

8002

* * * *

OUT FB

КР580ИК55

8003

* * * *

8004

* * * *

START

IN FA

Читання даних із вхідного порту в акумулятор

8005

* * * *

8006

* * * *

MVI В, ОА

0000 0101— В

8007

* * * *

8008

* * * *

ANA В

А*В – А

8009

* * * *

OUT F9

Запис даних у порт виводу

800А

* * * *

800В

* * * *

JMP START

Зациклення програми

800С

* * * *

800D

* * * *

Кожне мнемонічне позначення повинне бути перетворене у відповідних КІП і доповнено необхідними даними /якщо потрібно/. Ця програма зчитує дані з перемикачів вхідного порту, а потім поєднує їх по "І" із числом 0000 1010. Результат з'являється на світлодіодних індикаторах. Потім програма вертається на початок, і процес нескінченно повторюється, так що можна змінити вхідні дані й перевірити відповідні вихідні.

2. Перевірте правильність уведення програми.

3. Установите початкову адресу 8000 та натисніть кнопку ПУСК. Програма виконується.

4. Установите вхідні перемикачі в 1. Індикатори показують 0000 1010.

5. Зміните положення перемикачів і перевірте відповідні виходи. Біти, які поєднуються по "И" з нулями, не залежать від положення перемикачів.

6. Натисніть кнопку СКИДАННЯ для повернення керування монітору. Помітьте, що перемикачі не впливають більше на стан індикаторів. Замінити команду ANA В /за адресою 8008/ командою ORA В /КІП-BO/.

7. Запустите програму.

8. Подивиться на відповідність між різними положеннями вхідних перемикачів і станами індикаторів. Помітьте розходження між функціями "И" і "АБО". Виходи біт, об'єднаних по "АБО" з нулями, залежать від положення перемикачів.

9. Натисніть кнопку СКИДАННЯ. Замінить команду ORA У на XRA / КІП-А8/, Повторити кроки 7 і 8, Біти, об'єднані по " Що Виключає АБО" з одиницями/ інвертуються.

МАСКУВАННЯ

Типове застосування логічних команд - виділення певних біт слова /або маскування/. Для приклада припустимо, що нам потрібно перевірити стан одного з перемикачів, підключених к. порту уведення, а стан інших проігнорувати. На мал.3 показана структурна схема програми, що перевіряє перемикач, з'єднаний із другим бітом вхідного порту. Якщо ключ замкнуть, індикатор загоряється й - навпаки.

Табл.2 показує лістинг програми. Спочатку програма робить програмування інтерфейсу. Потім вона зчитує дані із вхідного порту в акумулятор, засилає в регістр У слово, що маскує, і поєднує по "И" регістр У и регістр А. У результаті всі біти, крім другого, приводяться до нуля. Значення другого біта результату буде залежати від положення перемикача. Програма використовує команду JZ для переходу, якщо встановлено прапор нуля.

Таблиця 2 Програма перевірки другого біта

Адреса

Зміст

Мітка

Команда

Коментарі

8000

MVI A, 81

Програмування інтерфейсу

8001

8002

OUT FB

8003

8004

START

IN FA

Читання даних з перемикачів в акумулятор

8005

8006

MVI B, 04

Запис у регістр У слова, що маскує, /0100 0100/

8007

8008

ANA В

А*В — А, виділення другого біта

8009

JZ OFF

Перевірка акумулятора на 0

800А

800У

800С

ON

MVI A, FF

Включення індикаторів

800D

800Е

OUT F9

800F

8010

JMP START

8011

8012

8013

OFF

MVI A, OO

Вимикання індикаторів

8014

8015

OUT F9

8016

8017

JMP START

8018

8019

Нульовий прапор індицує, що повний байт /і тому біт 2/ дорівнює 0,

Проведемо експеримент по виконанню цієї програми.

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

2. Запустити програму й перевірте, що вхідні перемикачі правильно управляють індикаторами. Всі індикатори запаляться тільки в тому випадку, якщо включено другий перемикач. Стан інших перемикачів байдуже.

3. Змінити програму, щоб перевірити інший перемикач. Якщо програма не працює, ретельно перевірте переклад у машинні коди й правильність уведення ; програми. .-/

Рис.3. Структурна схема програми для перевірки другого біта вхідного порту

СКИДАННЯ АКУМУЛЯТОРА

Команда XRA А поєднує по " Що Виключає АБО" акумулятор із самим собою. Тому що логічна функція " Що Виключає АБО" будь-якого числа із самим собою дає в результаті нуль, ця команда очищає акумулятор, використовуючи тільки один байт пам'яті. Інша команда MVI А, Про вимагає два байти пам'яті.

ЗРУШЕННЯ ДАНИХ

Інша часто необхідна функція - це зрушення даних вправо або вліво. В апаратурі це виконується за допомогою рушійних регістрів. МП КР580ИК80 має команди, які зрушують дані в акумуляторі.

Рис.3. Функції команд зрушення

RRC /кругове обертання вправо/ робить зрушення вправо, а L/C -уліво. Ці команди оперують тільки з акумулятором. Кругове обертання означає, що молодший біт зрушується на місце старшого /або навпаки/ /мал.3/.

На мал.4 наведена структурна схема програми для демонстрації функцій команд зрушення. При виконанні цієї програми на індикаторах спостерігається світіння типу " вогню, що біжить," .

Лістинг програми наведений у табл.3. Після програмування інтерфейсу програма заносить в акумулятор код 1000 0000. Потім виробляється вивід умісту акумулятора на індикатори. Команда виводу /OUT F9/ повторюється якийсь час, тому що вона перебуває в петлі затримки, організованої за допомогою регістрів D і Е. Затримка забезпечує повільну зміну стану індикаторів, без її зрушення даних акумулятора про/000 0000

Проведемо експеримент по виконанню цієї програми.

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

2. Перевірте правильність уведення програми й запустите її. На індикаторах з'явиться ефект " вогню, що біжить," вправо. Якщо не вдалося досягти потрібного ефекту, перевірте правильність машинних кодів записаної програми.

3. Заміните команду RRC на RLC. У цьому випадку спостерігається " вогонь, що біжить," уліво.

4. Ви можете також змінити частоту перемикання індикаторів,

Рис.4. Структурна схема програми для демонстрації функцій команд зрушення виходив би настільки швидко, що ми б не могли простежити за ним.

Програма для демонстрації функцій команд зрушення

Адреса

Зміст

Мітка

Команда

Коментарі

8000

MVI А , 8 1

Програмування інтерфейсу

8001

8002

OUT FB

8003

8004

MVI A, 80

1000 0000 — A

8005

8006

LOAD

MVI D,40

40 — D Завантаження регістрів D і Е для організації затримки

8007

8008

MVI E, FF

FF — E

8009

800А

L00P

OUT F9

Вивід даних на індикатори

800В

800С

DCR E

Е - 1 — Е

800D

JNZ LOOP

Якщо Е не дорівнює 0, то на LOOP /петля затримки/

800Е

800F

8010

DCR D

D - 1 —D

8011

JNZ LOOP

Якщо D не дорівнює 0, то на LOOP/петля затримки/

8012

8013

RRC

Зрушення даних в акумуляторі

8014

JMP LOAD

Повторення циклу

8015

8016

8017

заносячи в регістр D різні числа /тобто змінюючи затримку/. Для цього досить міняти код за адресою 8007, тобто змінювати другий байт команди MVI D. Заміняючи код за адресою 8005, ви можете змінити комбінацію "запалених" індикаторів.