Міністерство освіти України
Національний університет «Львівська політехніка»
Кафедра «Електроні обчислювальні машини»
Троценко В. В.
Завдання і методичні вказівки до циклу лабораторних робіт
з дисципліни
«Архітектура комп’ютерів»
Частина 1. Симулювання і дослідження поведінки класичної CISC машини Ноймана
ЛЬВІВ-2010
ЗМІСТ
ЛР № 01. Робота з симулятором машини Ноймана. Дослідження виконання машинного коду в автоматичному режимі. 3
ЛР № 02. Дослідження макроалгоритмів та мікроалгоритмів виконання машинних інструкцій. 11
Додаток 01. Задачі і програми-відповіді для симулятора комп’ютера 17
Література до першої частини лабораторних робіт 21ЛР № 01. Робота з симулятором машини Ноймана. Дослідження виконання машинного коду в автоматичному режимі.
Мета: опанувати роботу на симуляторі машини Ноймана, зрозуміти і дослідити принцип виконання програми машиною Ноймана.
Завдання: запустити симулятор, увести до нього коди машинних інструкцій і коди чисел, навчитися утворювати і змінювати ці коди, дослідити і пояснити принципи трактування машиною Ноймана бінарних кодів. Розробити тестову програму, завантажити програму і відповідні дані до симулятора, виконати програму в автоматичному режимі, проаналізувати і пояснити отримані результати, скласти звіт з виконання лабораторних досліджень та захистит його.
Методика виконання лабораторної роботи
CISC – complex instruction set computing (обчислення зі складною системою машинних інструкцій)
Аби дослідити дію машини Ноймана використовують симулятори цієї машини, що, в свою чергу, є готовими до використання комп’ютерними програмами. При роботі з такою програмою складається враження роботи з комп’ютером першої генерації, що приймає дані і подає результати і двійковій (бінарній) системі числення, має обмежений обсяг пам’яті, обмежене число регістрів і відсутню операційну систему. Коли в комп’ютері (в нас – в симуляторі комп’ютера) ОС нема, тоді кожну програму треба завершувати виконанням машинної інструкції СТОП. В автоматичному режимі одним натиском на клавішу комп’ютер змушують виконати уведену до нього програму - повністю, від першої до останньої машинної інструкції програми. Розглянемо конкретний симулятор машини Ноймана, якому автор надав назву «Кроха».
«Кроха» є DOS програмою, яку запускають у вікні DOS. Отже, миша з симулятором не працює так само, як і в ті давні часи, коли реалізували машину Ноймана. Треба користуватися курсором (рискою підкреслення) і клавішами пересування курсора. Але курсор діє лише у вікні пам’яті. Залишаються можливості керування симулятором натисканням вибраних клавіш апаратури. Таке керування є примітивним але таким, що дозволяє правдиво і чітко зрозуміти, як працює комп’ютер Ноймана, як з ним колись працювали, а також які в нього є принципові недоліки. Наступний рисунок 1 містить копію вікна симулятора Кроха. Симулятор є DOS програмою, що викликається в режимі командного рядка.
Рис. 1.1 – Вікно навчального комп’ютера «Кроха-М»
Зліва розташоване вікно пам’яті. Тут позначені адреси в бінарному коді, від 00002 до 11112 (всього 16 комірок). Вмістиме кожної комірки – це 3+4+4+4=15 бітова структура, що може бути або бінарним кодом цілого чила, або бінарним кодом машинної команди (так званої інструкції). Отже маємо не зовсім звичний 15-бітовий комп’ютер, що не підтримує парадигму байта.
Формат машинної інструкції машини Ноймана
В комп’ютері використаний наступний класичний формат 3-адресної машинної інструкції:
Поле коду операції.
Довжина 3 біти
Поле адреси 1-го операнда.
Довжина 4 біти
Поле адреси 2-го операнда.
Довжина 4 біти
Поле адреси результату.
Довжина 4 біти
КОп
А1
А2
А3
Приклад кодування інструкції (A1) + (A2) A3 :
000
0100
0101
0110
Рис. 1.2 – Формат машинної інструкції
Формат числа машини Ноймана
Симулятор використовує наступний єдиний формат даних:
Старший розряд
13 середніх розрядів бінарного коду
Молодший розряд
1 00000000001 1
Приклад кодування позитивного десяткового числа :1638410 + 310 = 1638710
Рис. 1.3 – Формат машинного числа
Негативні числа симулятор комп’ютера не опрацьовує, а всі кодові комбінації трактує як коди натуральних чисел і нуля. Максимальним є число з кодом 111 1111 1111 11112 = 3276810 -1 = 3276810, а мінімальним числом є число з бінарним кодом 000 0000 0000 00002 = тобто нуль.
Керування роботою з симулятором
Далі розглянемо вікно симулятора комп’ютера (табл. 1 ) та правила роботи з ним. Зауважимо, що симулятор запускають в командному рядку, отже, з мишою він не працює. Але є Windows симулятор цього комп’ютера, що сприймає мишу.
Табл. 1 – Управління симулятором
Клавіши керування комп’ютером
Дія клавіш
Ілюстрація
Інформаційне вікно
Негайно задати АВТО: F1, A
Негайно задати РЕДАКТОР: F2, Е
Негайно задати ШАГ: F3, S
Негайно задати ТАКТ: F4, Т
Вибирати режим
безпосередньо курсором: F5, R
Вибір і встановлення режиму роботи.
В режимі редактора можна змінювати вмістиме комірок пам’яті, суматора (СМ), лічильника інструкцій (СК), регістра інструкції (РК).
В режимі АВТО одним натиском на клавішу ENTER змушують комп’ютер виконати всю програму.
В режимі ШАГ одним натиском на клавішу ENTER змушують комп’ютер виконати чергову інструкцію програми.
В режимі ТАКТ одним натиском на клавішу ENTER змушують комп’ютер виконати чергову мікродію виконання чергової інструкції програми. Зауважимо, що виконання кожної інструкції розкладають на виконання певної послідовністі мікрокроків, кожний з яких називають мікродією (або мікрокомандою).
Вікно пам’яті
Бінарні адреси пам’яті не змінюються. Вмістиме комірок пам’яті (бінарні коди) змінюються. Для цього в режимі редагування потрібно підвести курсор під біт, що змінюється та натиснути 0 або 1.
Вікно арифметичного та логічного пристрію (АЛП)
Показує:
код виконуваної інструкції, що зберігає регістр інструкції (РК=регистр команди);
вмістиме суматора (СМ);
вмістиме лічильника номера виконуваної інструкції (СК=счетчик команд).
Екранне вікно для візуалізації значень операндів і результатів обчислень
Показує десяткові значення вмістимого комірок пам’ті за адресами А1, А2 та А3 інструкції СТОП (Виведення), бінарний код операції якої є 1112. Отже, коли за одною з трьох вказаних адрес розміщено інструкцію ми побачимо її як якесь число. Це на перший погляд є дивною, але принципово важливою рисою машини Ноймана, якою є ПК та багато інших комп’ютерів.
Довідкове вікно
Вікно містить всі дозволені коди операцій, а також правила маніпулювання з режимами симулятора за допомогою клавіатури. Всього дозволено виконання вісьми операцій (пересилання вмісту комірки пам’яті з адресою А1 до коміркм пам’яті з адресою А3 (код 0002), додавання (0012), ділення вмісту А1 на вміст А2 (код 0102), обчислення модуля різницівмісту А1 і А2 з записом результату до А3 (код 0112), умовного переходу (коли вмісти А1 і А2 є рівними, тоді наступною виконують інструкцію не з наступної за чергою адресою, а з адреси А3 (код 1002), множення вмісту А1 на вміст А2 з записом добутку до А3 (код 1012, ще одного умовного переходу [коли вміст А1 є більшим від вмісту А2, тоді наступно виконуваною є інструкція з комірки з адресою А3] (код 1102) та завершення обчислень і виведення до дисплейного вікна вмістимого комірок пам’яті з адресами А1, А2. А3.
Далі подамо стан комп’ютера за умови, що не усі комірки пам’яті містять нульовий бінарний код (рис. 1.4).
Рис. 1.4 – Стан симулятора з ненульовою пам’яттю
Запишемо до комірки пам’яті з адресою 10102 код 101 1101 1110 11112, а до комірок те, що подане наступною таблицею 2:
Таблиця 2. Бінарний код
10102
101 1101 1110 11112 = інструкція A1 * A2=> A3
11012
100 0000 0000 00112 = 1638410 + 310 = 1638710
11102
000 0000 0010 00012 = 3210 + 110 = 3310
11112
000 0000 0000 00002 = 010
Далі, коли виставити курсор на лінію вмістимого комірки з адресою 10102 (курсор не можна побачити на поданому рисунку, але його розташування легко побачити у вікні реальної програми), тоді в інформаційному вікні можна побачити, як ці записи трактує комп’ютер.
По-перше, бінарний код комірки, на якій знаходиться курсор, він сприймає як код інструкції та розшифровує його як інструкцію множення вмістимого комірки за першою адресою А1=11012 на вмістиме комірки за другою адресою А2=11102. Така інструкція має поміщати добуток до комарки з третьою адресою А3=11112. Але тут знаходиться не добуток, а нульовий бінарний код, який комп’ютер сприймає як десятковий нуль.
По-друге, коли бінарний код за адресою 10102 протрактовано як інструкцію, тоді комп’ютер вже мусить трактувати вмістиме адрес 11012 - 11112 як бінарні коди цілих позитивних чисел, адже ці адреси належать щойно протрактованій інструкції. Нульовий код добутку пояснити нескладно: ця інструкція ще не виконувалася і комірка результату містить сміття (в нас це є нуль).
По-третє, вмістиме кожної комірки пам’яті, на якій стоїть курсор в режимі редагування, комп’ютер завжди трактує як машинну інструкцію. Поглянемо на рис. 1.5.
Рис. 1.5 – Вікно для стану комп’ютера, коли курсор в режимі редагування розташований на вмістимому комірки пам’яті з адресою 11012.
Нічого не мінялося. Ми лише змусили комп’ютер перейти від трактування вмістимого комірки 10102 до трактування вмістимого комірки 11012. А результат побачили разючий! Те вмістиме, що трактувалося чисом, почало трактуватися як машинна інструкція.
Але все коректно. Ось такими і є сучасні комп’ютери. В межах пам’яті неможливо відрізнити код числа від коду інструкції. А розрізняти потрібно. Так ось, розрізнення відбувається вже поза пам’яттю. Бінарний код, що з пам’яті пристрій керування надсилає до суматора стає числом, а той код, що той самий пристрій надсилає до регістра інструкції (РК), стає інструкцією. Пристрій керування приймає рішення щодо напрямку надсилання, керуючись і уведеною до пам’яті програмою, і вказівкою, з якої комірки пам’яті розпочинається програмний код, за умови, що інструкції програми розташовані в пам’яті в комірках з послідовними адресами (n, n+1, n+2, n+3, ...). В цьому комп’ютері прийнято, що перша інструкція програми завжди знаходиться в комірці з адресою 00002. Якщо програміст цого обмеження не дотримується, тоді уведена ним до пам’яті програма не надає коректні результати.
Про машину Ноймана
Структуру машини Ноймана [Johann von Neumann (Будапешт. 1903 р.н. і Німеччина), John von Neumann (USA), Джон Нейман (Росія)] містить рис. 1.6.
Рис. 1.6. Структура машини Ноймана, запропонована в 1945 році в Гарвадському університеті США. Саме цю (приховану від наших очей) структуру має комп’ютер «Кроха».
За допомогою пристрою введення бінарні коди чисел і машинних інструкцій потрапляють (чорні лінії) транзитом через АЛП до пам’яті, де і зберігаються під час автоматичного виконання обчислень. Отже, під час введення АЛП зайнято транзитним пересиланням і комп’ютер не може обчислювати. Коли уведення завершене, тоді по команді старту, що надає людина, комп’ютер починає виконувати заведену людиною до пам’яті програму автоматично (без участі людини).
При цьому бінарні коди з пам’яті, що надсилаються (синя лінія) до пристрою керування, сприймаються як машинні інструкції. На основі прийнятих з пам’яті кодів машинних інструкцій пристрій керування керує роботою всіх інших пристроїв комп’ютера (червоні штрихові лінії).
Бінарні коди, що надсилаються з пам’яті до АЛП (чорні лінії), сприймаються як коди чисел, що приймають участь в формування результату. Можливе збереження проміжних результатів обчислень в тій самій пам’яті чорна двохнаправлена лінія). Остаточні результати також спочатку надсилають до пам’яті, а вже потім виводять для користування людиною через пристрій виводу (чорна лінія).
До впровадження багатопроцесорності всі персональні комп’ютери (навіть з процесором Пентіум 4) були класичними машинами Ноймана. Отож, з 1945 року до 2000 року ПК незмінну ідею, але змінювалися при цьому технологічно.
Розглянемо стан симулятора, що поданий рисунком 2.1.
Рис. 2.1 – Стан симулятора після уведення першої інструкції додавання [ + A1 A2 A3 чи 001 1101 1110 1111, тобто, додати вмістиме комірок пам’яті А1 і А2, а результат записати до комірки А3] до комірки пам’яті з нульовою адресою, де має розташовуватися перша команда програми. Інформаційне вікно повідомляє, що уведений до комірки з нульовою адресою код можна трактувати як десяткове число 7663 або як команду А1 + А2 =Ю А3. Проте вмістиме лічильника інструкцій СК є нульовим (00002). З цього випливає, що симулятор трактує вмістиме комірки з нульовою адресою як команду, а не як число. Курсор розташований на першій лінії пам’яті, але його не видно на рисунку. Ясно, що саме позиція курсора наказує симулятору вибирати конкретний рядок (вмітиме відповідної комірки пам’яті) для інтерпретації
Рис. 2.2 – Стан симулятора після уведення другої інструкції СТОП, ВИВЕДЕННЯ [ СТОП/ВИВ A1 A2 A3 чи 111 1101 1110 1111] до комірки пам’яті з першою (00012) адресою, де розташовували другу команду програми. Інформаційне вікно повідомляє, що уведений до комірки з першою адресою код можна трактувати як десяткове число 32239 або як команду СТОП, ВИВЕДЕННЯ. Але після виконання першої інструкції додавання вмістиме лічильника інструкцій (СК), що було нуль, збільшиться на одиницю (кажуть – інкрементується) і стане дорівнювати одиниці. В ценй часовий момент СК змусить симулятор трактувати вмістиме (код) першої вомірки пам’яті як інструкцію, а не як число. Отже, після виконання першої інструкції з нульової комірки пам’яті, виконається друга (і остання) інструкція програми, а саме – СТОП/ВИВЕДЕННЯ. В результаті в екранному вікні ми побачимо подані в десятковій формі доданки і суму. Тут курсор розташований на другій лінії пам’яті, але його не видно на рисунку.
Отже, до симулятора вручну уведена коротка програма, що складена двома інструкціями (рис. 2.3):
Адреса пам’яті
Машинна інструкція
Функція інструкції
Мнемонічний код
Бінарний код
00002
+ А1 А2 А3
001 1101 1110 11112
Додати
00012
СТОП А1 А2 А3
111 1101 1110 11112
Зупинитися і показати
Рис. 2.3 – Перша програма симулятора машини Ноймана, що складена двома машинними інструкціями
Проте уведена програма ще не має даних. Якщо казати точно, то ці дані мають розміщатися в комірках пам’яті з адресами 11012= 1310 та 11102=1410. Ці комірки мають нулюве наповнення, отже містять коди нуля. Ясно, що і сума повинна бути нульвою. Так і є, але суто випадково. До уведення даних і до виконання програми вмістиме трьох останніх комірок пам/яті треба розглядати як «сміття», бо вона ані нами, ані виконуваною програмою не визначено. Просто в комірках не може бути «нічого». Там завжди «живуть одиничкі і нулі.
Уведено доданки, наприклад 1710 і 2310 до комірок з адресами 1310 і 1410 відповідно. Отримаємо стан симулятора, як він поданий на рис. 2.3.
Рис. 2.3 – Стан симулятора після уведення доданків. В інформаційному вікні трактується вмістиме комірки з адресою 11102 = 1410, де міститься другий доданок 2310. Ясно, що невидимий на рисунку курсор розташований на лінії 11102 пам’яті.
На поточний момент часу до симуляторра уведено програму і дані. Всього нам потрібно 2+3= 5 комірок пам’яті. Пам’ять має 16 комірок. Отже, 11 комірок ми не використовуємо. Саме в цих комірках і залишається сміття (в нас нулі, але реально – довільна суміш нулів і одиниць). Змінимо режим роботи симулятора з РЕДАКТОР на АВТО і цим виконаємо всю програму. Отримуємо наступне вікно симулятора (рис. 2.4).
Рис. 2.4 – Стан симулятора після виконання програми. Основні зміни, що сталися є наступними.
В екранному вікні з’явилися операнди і результат в бінарній і десятковій формах.
В вікні пам’яті в останній 15 комірці також з’явилася сума.
Суматор СМ містить бінарний код суми.
Регістр інструкцій РК (регистр команд) містить код останньої виконаної машинної інструкції (СТОП).
Лічильник інструкцій СК (счетчик команд) отримав значення 00102=210, пройшовши поспіль значення 00002 (стартове), потім 00012 та зупинився на значенні 00102. Ясно, що ці зміни вмістимого СК спричинив процес виконання нашої двох інструкційної програми. Зафіксоване (залишкове) вмістиме СК показує адресу машинної інструкції, що розташована після останньої інструкції нашої програми та їй неналежить. Ясно, що в режимі авто ця інструкція не виконувалася і так має бути.
При цьому помилок виконання немає.
ЛР № 02. Дослідження макроалгоритмів та мікроалгоритмів виконання машинних інструкцій.
Мета: зрозуміти і дослідити макроалгоритм та мікроалгоритм виконання кожної машинної інструкції машини Ноймана.
Завдання: покроковим режимом протестувати виконання кожної машинної інструкції, проаналізувати і пояснити отримані результати, потактовим режимом протестувати поокреме виконання кожної машинної інструкції, проаналізувати і пояснити отримані результати, скласти звіт з виконання лабораторних досліджень та захистит.
Методика виконання лабораторної роботи
В покроковому (по-інструкційному, покомандному) режимі виконання програма може містити навіть одну машинну інструкцію. Її виконують одноразовим натисканням влавіші S. Перезапустимо симулятор та уведемо до нульової комірки пам’яті машинну інструкцію обчислення модуля різниці, тобто, дослідимо алгоритм виконання машинної інструкції віднімання. При цьому сплануємо використання пам/яті, до якої треба увести код машинної інструкції, коди операндів і виділити місце для запису результату. Наприклад, операнди розташуємо в комірках з адресами 13 і 14, а результат – в комірці з адресою 15. Код інструкції запишемо до комірки з нульовою адресою. Нагадаємо, що в симуляторі покроковий режим має назву ШАГ.
Рис. 3.1 – Стан симулятора з інструкцією віднімання [ - A1 A2 A3 чи – 1310 1410 1510]. Отже, наказали відняти від вмістимого комірки 13 вмістиме комірки 14, а модуль результату записати до комірки 15. Іншими словами, наказали обчислити модуль mod (7 – 52) = ?.
Після одноразового натискання на клавішу S отримуємо наступний стан симулятора:
Рис. 3.2 – Стан симулятора з інструкцією віднімання [ - A1 A2 A3 чи – 1310 1410 1510]. Отже, наказали відняти від вмістимого комірки 13 вмістиме комірки 14, а модуль результату записати до комірки 15. Коректно обчислили mod (7 – 52) = 45.
Дослідження алгоритму виконання інструкції віднімання завершено.
В покроковому (інші назви: поінструкційний, покомандний режим) режимі виконання окремої машинної інструкції досліджують мікроалгоритм виконання цієї інструкції. Якщо прийняти до уваги, що в класі універсальних машин алгоритми програмують, програми завантажують до комп’ютерів і ними виконують, то зараз вийде наступне.
1. Програми складають з машинних інструкцій. Кожна інструкція має свій алгоритм виконання і цей алгоритм має точно уявляти системний програміст, що пише програму машинним кодом (як не дивно, але таке трапляється і трапляється не так зрідка). Алгоритми виконання кожної окремої машинної інструкції, що сприймає програміст, називають макроалгоритмами.
2. Для комп’ютерного інженера кожний макроалгоритм, особливий для кожної машинної інструкції, теж потрібно «запрограмувати», тобто, в певній формі записати «програму», що реалізує макроалгоритм виконання тої чи іншої машинної інструкції. Це подібно до програмування, але є іншим.
3. Кажимо, що програміст програмує задачу, а комп’ютерний інженер (мікропрограміст) мікропрограмує макроалгоритм виконання машинної інструкції. Виконання однієї такої мікропрограми є для програміста еквівалентним виконанню однієї машинної інструкції. Якщо програміст розуміє, як поокремі машинні інструкціями складають цілістну програму, то мікропрограміст цим не цікавиться. Задача мікропрограміста - надати в розпорядження програміста ефективний за певними критеріями набір машинних інструкцій (кажуть, множину машинних інструкцій).
Наприклад, множина з вісьми машинних інструкцій симулятора Кроха і його дуже обмежена пам’ять в 16 15-розрядних комірок дозволяє створити для нього компілятор мови Паскаль.
Отже, технології програмування комп’ютерів і їхнього проектування (створення мікрокодів для кожної машинної інструкції) є досить спорідненими.
4. Коли програми складені з машинних інструкцій (команд), тоді кожну машинну інструкцію складають з мікрокоманд, що всі разом утворюють мікропрограму виконання певної машинної інструкції команди).
В цій лабораторній роботі ми маємо дослідити мікроалгоритми і мікропрограми, що реалізують мікро- алгоритми, виконання кожної мащинної інструкції машини Ноймана. Далі як приклад дослідимо мікроалгоритм виконання мащинної інструкції пересилання з бінарним кодом операції 0002. Машинна інструкція пересилання пересилає вмістиме комірки пам’яті з адресою А1 до комірки пам’яті з адресою А3. Значення і вмістиме адреси А2 ні на що не впливає. Викликаємо симулятор, пишемо до нульової комірки пам’яті машинну інструкцію пересилання та операнд до комірки з адресою А2. Під час виклику симулятора вся пам’ять онулюється. Тому спочатку за адресою призначення маємо всі нулі.
Рис. 4.1 – Машина Ноймана з машинною інструкцією пересилання в нульовій комірці пам’яті та оперендом на пересилання в 14 комірці. Наповнення комірки призначення (адреса 15) до виконання пересилання є нульовим. Лічильник інструкцій онулений. Значить першою виконуватиметься інструкція, яку містить нульова комірка пам’яті.
Рис. 4.2 – Стан машини Ноймана після натиснення клавіші R вибору режиму з подальшим вибором режиму ТАКТ. Режим ТАКТ дозволяє покрокове виконання але не в межах виконання програми, а в межах виконання однієї машинної інструкції. Отже, «потактово» ми бачимо мікрокроки, послідовне здійснення яких спричиняє виконання певної машинної інструкції. Іншими словами, коли виконують послідовність машинних інструкцій, тоді фактично виконують послідовність мікропрограм. Віртаульно в комп’ютері виконуються машинні програми, а реально виконуються мікропрограми тих машинних інструкцій, що записав машинними кодами програміст (як не він. То компілятор замість нього). В інформаційному вікні зазначено, що першою мікродією в мікропрограмі виконання машинної інструкції пересилання є «виборка команди из ячейки 0000 в РК». Тобто, першим мікрокроком бінарний код, що містить комірка пам’яті з адресою нуль (00002) копіюється дорегістру інструкцій (РК). Якщо в межах пам’яті не можна зрозуміти чим є бінарний код: інструкцією або числом, то код завантажений з пам’яті до регістру машинної інструкції (РК – регістр команди, IR – instruction register) завжди буде кодом машинної інструкції. Отже, маємо першу мікрокоманду мікропрограми виконання машинної інструкції пересилання:
МК1: memory(0000) → IR.
Рис. 4.3 – Натиснемо клавішу Т (такт) і отримаємо цей стан машини Ноймана, коли виконалася друга мікродія мікропрограми виконання машинної інструкції пересидання. Цією мікродією вмістиме СК (счетчик команди, лічильник машинної інструкції, PC - program counter) інкрементовано (збільшено на 1), аби отримати адресу, з якої треба вибирати наступної машинної інструкції. З якої складається програма комп’ютера. В нас уся програма – це одна інструкція в комірці з нульовою адресою. Хоч і нема, а коли була. Тоді другу інструкцію розташували за першою адресою. Саме її і обчислив лічильник номера інструкції. Отже, маємо другу мікрокоманду мікропрограми виконання машинної інструкції пересилання:
МК2: PC + 1 → PC.
Рис. 4.4 – Ще раз натиснемо клавішу Т (такт) і отримаємо цей стан машини Ноймана. Третьою мікрокомандою мікропрограми бінарний код операнда переслано з джерельної комірки пам’яті з адресою 14 (11102) до суматора СМ (ще має назву акумулятора, АСС або асcumulator) компьютера. Отже, маємо третю мікрокоманду мікропрограми виконання машинної інструкції пересилання:
МК3: memory(1110) → ACC.
Рис. 4.5 – Ще раз натиснемо клавішу Т (такт) і отримаємо цей стан машини Ноймана. Четвертою мікрокомандою мікропрограми бінарний код операнда переслано з акумулятора до цільової комірки пам’яті з адресою 15 (11112). Виконання інструкції пересилання завершено так само, як завершено виконання її мікропрограми. Отже, маємо четверту і завершальну мікрокоманду мікропрограми виконання машинної інструкції пересилання:
МК4: ACC → memory(1111).
Рис. 4.6 – Якщо по завершенню мікропрограми ще раз натиснути клавішу Т (такт), тоді отримаємо цей стан машини Ноймана з виконаною першою мікрокомандою мікропрограми виконання машинної інструкції, яку містить перша комірка пам’яті. Нехай там маємо нульове сміття (ми це не писали, машина Ноймана сприймає це сміття за бінарний код машинної інструкції і починає його виконувати. Проте виконання наступної машинної інструкції є іншою історією. Що нас зараз не цікавить.
В результаті ми отримали наступну мікропрограму виконання машинної інструкції пересилання:
МК1: memory(0000) → IR.
МК2: PC + 1 → PC.
МК3: memory(1110) → ACC.
МК4: ACC → memory(1111).
Цим дослідження мікропрограми виконання машинної інструкції пересилання вмістимого однієї комірки пам’яті до іншої завершено.
Про пристрій керування процесора
Процесор комп’ютера складають з двох автоматів:
Операційного автомата (його складові і стан відбиває вікно симулятора,
Керуючого автомата (він у вікні симулятора поданий фрагментарно, а саме, регістром машинних інструкцій РК (IR) та лічильником машинних інструкцій СК (ЛІ, РС).
Всі мікропрограми, а їх ми маємо вісім за числом різних машинних інструкцій комп’ютера, вміщує керуючий автомат (пристрій керування). Щодо мікропрограм, то важливим є наступне:
Пристрій керування, що використовує техніку мікропрограмного виконання машинних інструкцій, називають мікропрограмним.
Мікропрограмний пристрій керування може містити додаткову, так звану мікропрограмну пам’ять, аби зберігати мікрокоди мікропрограм (тобто, бінарно кодовані мікропрограми). Кажуть мікропрограмний пристрій керування з мікропрограмною пам’яттю побудований на принципі гнучкої логіки (адже можна за потреби без зміни схеми керування міняти лише коди мікропрограм, перепрограмовувати мікропрограмну пам’ять). Пам’ять мікропрограм оригінально називають сontrol memory. Ця мікропрограмна пам’ять існує окремо від основної пам’яті (main memory) і ніяк з нею не пов’язана. Мікропрограмна пам’ять функціонує швидко, на частоті процесора, тому її місткість обмежена і не перевищує рівня кілобайтів або десятків кілобайтів (до 32 КБ).
Мікрокоди, що за своєю сутністю збігаютє постійною пам’яттю (в штатному використанні процесора мікорокоди не змінюють), можна імплементувати в пристрої керування ще як комбінаційну схему. В цьому випадку кажуть, що мікропрограмний пристрій керування реалізований на жорсткій логіці (або просто, що це є апаратний, а не мікропрограмний пристрій керування). Математичеими моделями апаратного пристрою керування є автомати Уілкса-Стринджера, Мура, Мілі.
В будь-якому варіанті, треба розрізняти основну і мікропрограмну пам’ять. Основна пам’ять знаходиться поза межами процесора та йому не належить. Мікропрограмна пам’ять знаходиться в процесорі, точніше, в його пристрої керування і вона належить процесору.
Аби виконати машинну інструкцію (команду) потрібно виконати відповідну інструкції мікропрограму. На початку виконання нової машинної інструкції пристрій керування безумовно (але спираючись на вмістиме лічильника інструкцій) вибирає на регістр інструкції (РК, IR) бінарний інструкції. При цьому визначаються три праві біти кода операції. На основі наповнення цих трьох бітів вибирають і виконують відповідну коду операції мікропрограму.
Об’єднану граф-схему мікроалгоритму виконання всіх машинних інструкцій подано рис. 4.7.
Рис. 4.7 – Об’єднана граф-схема (ОГС) мікропрограмного керування. ОГС містить вершини чотирьох типів, а саме:
початкову з одним виходом,
кінцеву з одним входом,
операторні з одним входолм та одним виходом,
умовну з одним входом та багатьма (класично лише з двома) виходами,
Після кінцевої вершини слідує початкова вершина аби забезпечити керуванням не одну ізольовану інструкцію, а тривалий потік цих інструкцій (Король помер. Хай живе король!). Один прохід через ОГС викликає виконання чергової машинної інструкції. В нас умовна вершина повинна мати вісім виходів (по числу різних машинних інструкцій) і, відповідно, повний граф містить вісім паралельних гілок. Але ми детально розписали лише першу гілку, яка відповідає керуванню, потрібному для виконання машинної інструкції пересилання, що має код операції Коп = 000. Важливо, що дві перші операторні вершини не аналізують КОп і виконуються безумовно для будь-якого типу машинної інструкції. Далі кожній інструкції потрібні свої мікродії. Тому в ОГС на третьому місці стоїть умовна вершина, що опитує Коп і, відповідно, направляє подальше керування до однієї з вісьми паралельних гілок.
Студент повиннен дослідити поведінку комп’ютера і скласти повну ОГС мікропрограмного керування.
Зауважимо, що сучасні засоби автоматизованого керування комп’ютерних апаратних засобів (САПР) після уведення до них ОГС в графічній формі автоматично (без участі людини) синтезують функційну і принципову схеми, на основі яких також автоматично імплементує цей граф в «залізі».
Література до першої частини лабораторних робіт
Еремин Е.А. Популярные лекции об устройстве компьютера. СПб.: BHV-Петербург, 2003, 272 с.
Абель П. Язык Ассемблера для IBM PC и программирования. М.: Высш. шк., 1992, 447 с.
Еремин Е.А. Моделирование работы ЭВМ с помощью программы Microsoft Excel. Информатика, 2006, N 21, с.37-40; N 22, с.42-45.
Гейн А.Г., Житомирский В.Г., Линецкий Е.В. и др. "Основы информатики и вычислительной техники" (1989).
Варіанти завдань на лабораторну роботу №1
Створити програму у машинних кодах для обчислення виразу згідно наведених варіантів. Результат виконання має виводитися у вікно результату. Для змінних та констант визначити відповідні комірки пам’яті.
№
Завдання
1
r=12(x+y)(z+4)
2
r=8(x-y)/(z-10)
3
r=7(x+y)-(xy-z)
4
r=5(x-y)/(z+y)
5
r=12(x-y)/(z-13)
6
r=16(x-y)(y+6)
7
r =20(x-y-z)+y2
8
r =15(x+y-z)
9
r=3(x-y)(12-2y)
10
r=8x(x-y)
11
r=6x/z+(x-y)
12
r=8z*5/(x-y)
13
r =10(x-y+z)
14
r =13(2x+y)
15
16
r =20(x+y+2z)
17
r =21(x-2y)
18
r=31z3(x-y)
19
r=8(x-y)+(zx+yx)/2
20
r=12(x-y/2)
21
r=3(x/3-y)
22
r =13(x-2y-z)
23
r =14(x+2y-z)
24
r=5/z(x-y)
25
r=4zx(x-y)
26
r=2+23x(x-y)
27
r=(11/x)(x-y)
28
r =16/(2
29
30
Варіанти завдань на лабораторну роботу №2
Створити програму у машинних кодах для обчислення виразу згідно наведених варіантів. Результат виконання має виводитися у вікно результату. Для змінних та констант визначити відповідні комірки пам’яті.
№
Завдання
1
r =2(1+2+…+17)
2
r =2(2+3+…+9)
3
r =2(56+57+…+66)
4
r =2(111-112-…-129)
5
r =2(11+12+…+27)
6
r =2(12+13+…+29)
7
r =2(25+26+…+39)
8
r =2(11-12-…-29)
9
r =22+23+…+33
10
r =110+111+…+125
11
r =100-101-…-119
12
r =42-43-…-50
13
r=1+2+4+…+32
14
r =100x-101x-…-119x
15
r =|x-6|
16
r =100x-101x-…-119x
17
r =x+x2+…+x6
18
r =100-101-…-119
19
r =10x-15-…-30
20
r =100z-101-…-119
21
r =123z/2-101-…-119
22
r =24+25x2-…-28x5
23
r =100+34-35+36…+40
24
r =12+13+14…+35
25
r =100x+95x+…+80x
26
r =12+14+18…+74
27
r =2x(10+12-…+20)