Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт ОФК лаба 2.doc
Скачиваний:
6
Добавлен:
24.11.2019
Размер:
174.59 Кб
Скачать

Міністерство освіти і науки, молоді та спорту України

Національний університет “Львівська політехніка”

Кафедра СКС

ЗВІТ

з лабораторної роботи №2

з дисципліни “Організація та Функціонування комп’ютерів”

на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій”

Виконав: ст. гр. КІ – 14

Купецький А.В.

Прийняв: ст. викл.

Кудрявцев О.Т.

Львів-2012

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

Тема:

Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.

Мета:

  1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;

  2. Засвоїти призначення регістра ознак процесора;

  3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.

  4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та

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

Теоретичні відомості:

Усі інструкції у навчальному комп’ютері можна поділяти за такими напрямками:

  1. За форматом коду інструкції;

  2. За призначенням.

Нагадаємо, що за форматом коду інструкції є адресні та безадресні. Безадресні інструкції взагалі не використовують будь-які операнди, як, наприклад, інструкція HALT або інструкції зсувів. У таких інструкціях однозначно відомо, звідки брати операнди для операції, наприклад:

- інструкція NOT однозначно працює з акумулятором (інвертує його вміст);

- так само роблять усі інструкції зсувів (LSL, ASR, ROR та інші);

- а от інструкції INPUT та OUTPUT працюють не лише з акумулятором, але й з портами вводу (INPUT) та виводу (OUTPUT).

У свою чергу, адресні інструкції для виконання своєї операції потребують операнди, в якості яких може бути вміст будь-якої з 4096 комірок пам’яті симулятора. Отже, окрім коду операції, який займає найстарші 4 розряди машинного коду інструкції (від 15-го до 12-го ), решту розрядів займає 12-розрядна адреса комірки пам’яті, значення вмісту якої стане операндом і буде оброблятись у даній інструкції.

Усі інструкції навчального комп’ютера за призначенням можна розділити на такі групи:

1) інструкції звертання до пам’яті (LOAD та STORE);

2) арифметичні інструкції (ADD та SUB);

3) логічні інструкції (AND, OR, XOR та NOT);

4) інструкції вводу/виводу (INPUT та OUTPUT);

5) інструкції керування виконанням програми:

а) інструкція зупинки (HALT);

б) інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);

в) інструкція безумовного переходу (JMP);

6) інструкції зсувів (вліво (Left) та вправо (Right)):

а) інструкції логічного зсуву (LSL та LSR);

б) інструкції арифметичного зсуву (ASL та ASR);

в) інструкції циклічного зсуву (ROL та ROR);

г) інструкції циклічного зсуву через тригер ознаки переносу C (RCL та RCR).

1.1. Інструкції звертання до пам’яті:

1) LOAD ADR - завантажити (від англ. Load - завантажувати).

Машинний код цієї інстркції – 0000 aaaa aaaa aaaa; виконання – (ADDR) Акумулятор.

Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання.

2) STORE ADR - зберегти (від англ. Store - зберігати)

Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор (ADDR)).

Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті.

Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом, через який відбудеться передача.

1.2. Інструкції арифметичних операцій:

1) ADD ADR – арифметичне додавання (від англ. Addition -додавання)

Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) Акумулятор.

Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат.

Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора.

2) SUB ADR – віднімання (від англ. Subtraction - віднімання).

Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR) Акумулятор.

Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися. Інші властивості цієї інструкції співпадають із властивостями інструкції додавання ADD.

1.3.Призначення Регістру Ознак

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

- потрібно відрізняти додатні і від’ємні числа;

- потрібно визначати стан, коли результат виконання інструкції дорівнює нулю;

- потрібно визначати переповнення розрядної сітки акумулятора.

Для фіксації цих станів існує регістр ознак у процесорі, який має три тригери: Z, S i C. На панелі навчального комп’ютера він розміщений біля акумулятора.

Прапорець Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками.

Прапорець S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S.

Прапорець C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки.

Деколи різні ознаки результату можуть з’являтися одночасно. Наприклад, інструкція віднімання SUB може встановлювати усі три ознаки: Z, S та C.

1.4. Дослідження виконання інструкцій навчального комп’ютера

Для дослідження алгоритмів і ходу виконання програм за окремими інструкціями існує покроковий режим роботи навчального комп’ютера.

Загальний принцип виконання однієї інструкції:

  • вибірка інструкції;

  • декодування (розпізнавання) інструкції;

  • вибірка (читання) операндів;

  • виконання операції (арифметичної, логічної чи якоїсь іншої);

  • збереження (запис) результату.

Для дослідження порядку виконання окремих інструкцій у процесорі призначений 3-й режим роботи навчального комп’ютера – потактовий.

Для прикладу, розглянемо порядок виконання інструкції додавання (ADD) за допомогою потактового режиму роботи навчального комп’ютера. Інструкція додавання обробляє два операнда, які повинні бути заздалегідь підготовлені. Вони можуть бути обидва розміщені у ОЗП, або один з них може бути розміщений безпосередньо у акумуляторі.

Виконаємо цю підготовку. Для цього спочатку за допомогою пульта управління занесемо до 0-ї комірки пам’яті машинний код інструкції ADD 01 - 0010 0000 0000 0001, до 1-ї комірки – число 15 (двійковий код = 0000 0000 0000 1111), а до акумулятора число 240 (двійковий код = 0000 0000 1111 0000). У результаті виконання цієї інструкції у акумуляторі ми повинні отримати суму двох чисел - 15 + 240 – число 255 (машинний код - 0000 0000 1111 1111). Фактично нами складена програма додавання двох чисел, з яких одно знаходиться у комірці пам’яті за адресою 0000 0000 0001, а друге – у акумуляторі, а сама інструкція розміщена у комірці пам’яті з адресою 0000 0000 0000.

Для початку виконання інструкції до ЛАІ - лічильника адреси інструкцій - занесемо адресу розміщення першої інструкції ADD 01, тобто - 0000 0000 0000, а також встановимо потактовий режим роботи симулятора відповідною кнопкою вибору режиму.

Тепер, натискаючи кнопку ПУСК, ми можемо такт за тактом відслідковувати процес проходження інформації по регістрах процесора від початку до закінчення виконання інструкції. Під час здійснення аналізу на панелі процесора синім кольором позначатиметься джерело інформації (вихідний пристрій), а білим – місце призначення (кінцевий пристрій).

Відзначимо, що швидкість виконання одного кроку можна змінювати. Для цього необхідно у самому верху панелі, під синьою стрічкою заголовку вікна програми симулятора, вибрати пункт меню Режими, а у ньому – команду Тривалість підсвітки... У віконечку, що з’явиться, можна вибрати одне із значень затримки від 200 до 4000 мс. Стандартним значенням, яке автоматично встановлюється при запуску симулятора, є 800 мс.

Виконання інструкції ADD займає 8 тактів. У скороченому вигляді мікрокоманди виконання інструкції ADD виглядає так:

Мнемонічний запис

Код, що обробляється

Коментар

1

ЛАІ РА

0000 0000 0000

вибір адреси 1-ої інструкції і занесення її до Регістра Адреси

2

РА РД

0010 0000 0000 0001

вибір коду інструкції з РА і занесення його до Регістра Даних

3

РД РІ

0010 0000 0000 0001

декодування інструкції у Регістрі Інструкцій

4

РІ РА

0000 0000 0001

вибір адреси 1-го операнда

5

РА РД

0000 0000 0000 1111

вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних

6

А + РД А

0000 0000 1111 1111

виконання операції додавання (2-й операнд – у акумуляторі)

7

ZSC(А) РО

000

встановлення прапорців регістру ознак

8

ЛАІ + 1 ЛАІ

0000 0000 0001

підготовка адреси нової інструкції

Такий запис мікрокоманд виконання інструкції називають мікропрограмою виконання інструкції. У дужках наведено фактичні значення, які записуються у регістри процесора для нашої інструкції ADD 01.