Міністерство освіти та науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Методичні вказівки
до лабораторної роботи №1
з дисципліни “Організація та функціонування комп’ютерів”
на тему: “Ознайомлення з симулятором навчальної ЕОМ”
Укладач: ст.викл. кафедри ЕОМ,
к.т.н., Ерметов Ю.О.
Львів
2003
Лабораторна робота №1
Тема: “Ознайомлення з симулятором навчальної ЕОМ”
Мета: Отримати уявлення про призначення, можливості та правила роботи із симулятором навчальної ЕОМ, а також познайомитись із структурою та принципом роботи навчальної ЕОМ комп’ютера 1-го покоління”
1. Теоретичні відомості
Симулятор навчальної ЕОМ DeComp – це програма, яка повністю повторює роботу комп’ютерів 1-го покоління (наприклад, комп’ютер “Мінськ”, створений у 60-х рр. ХХ ст.) і дозволяє досліднику не тільки виконувати усі команди та програми, але й “зазирнути” у внутрішню структуру комп’ютера і крок за кроком відслідкувати, як він працює. Таким чином, симулятор – це програма, яка моделює роботу електронного пристроя і відображає результати роботи у зручному для дослідника вигляді. Дослідження комп’ютера 1-го покоління зручне тим, що його структура є максимально простою і містить мінімум елементів, необхідних для роботи комп’ютера взагалі. Сучасні комп’ютери надзвичайно складні, в яких додано велику кількість додаткових елементів, призначених для підвищення продуктивності комп’ютера.
Програма-симулятор навчальної ЕОМ, яку ми в подальшому будемо називати просто “симулятор”, знаходиться у комп’ютерах на логічному диску D: в каталозі DECOMP (D:\DECOMP) або в каталозі, на який вкаже викладач. Якщо запустити на виконання виконавчий файл DeComp.exe (або іконку симулятора , яка розташована на екрані монітора), тоді з’явиться вікно програми, зображене на рис.1.1.
Рис.1.1. Головна закладка вікна симулятора DeComp
Зверніть увагу, що в даний момент активізованою є головна “закладка” вікна – “Навчальна ЕОМ”, окрім якої існують ще закладки “Карта пам’яті ЕОМ”, “Пристрій підготовки даних” та “Документація до “Навчальної ЕОМ”.
Закладка , зображена на рис.1.1, фактично відображає зовнішній вигляд панелі управління реальних машин 1-го покоління. Як видно на рисунку, панель управління складається з двох частин: структури комп’ютера та пульта управління. Давайте познайомимось як з першою, так і з другою частинами панелі управління навчальної ЕОМ.
Отже, згідно із фундаментальними принципами побудови універсального обчислювача, запропонованими ще на початку ХІХ сторіччя англійським вченим Ч. Беббіджем, він повинен складатись з 5-ти основних частин (див. рис.1.2):
Рис.1.2. Структура універсального обчислювача Ч. Беббіджа
А саме:
арифметичний пристрій;
пам’ять інструкцій та даних;
керуючий пристрій;
пристрій вводу інформації;
пристрій виводу інформації.
Призначення кожної з частин є “інтуітивно” зрозумілим:
арифметичний пристрій повинен вміти виконувати математичні операції (додавання, віднімання, множення, ділення або й навіть складніші – добування квадратного кореня, піднесення до степення і т.інш.);
пам’ять інструкцій та даних – саме пам’ять визначає, які операції і у якій послідовності необхідно виконувати. Без пам’яті арифметичний пристрій не виконає жодної дії (хоча пам’ять без арифметичного пристроя, звичайно, також). Інструкції у пам’яті визначають, які операції і над якими даними необхідно виконувати, а послідовність інструкцій у пам’яті – порядок виконання операцій;
пристрої вводу та виводу інформації забезпечують зв’язок обчислювача із людиною. За часів Беббіджа (а навіть і за часів комп’ютерів 1-го покоління) інформація вводилась та виводилась з допомогою перфокарт – спеціальних пластинок з отворами, кількість та порядок розташування яких кодували інформацію. Ще раз звернемо увагу, що інформація, яку вводить людина у комп’ютер, може бути двох видів: дані, які необхідно обробляти, та інструкції, які визначають послідовність та тип виконуваних операцій;
керучий пристрій, відповідно, керує роботою усіх частин обчислювача. Для цього він повинен одна за одною зчитувати інструкції з пам’яті, “повідомляти” арифметичний пристрій про закладені у інструкціях операції та дані, а також змінювати свою роботу за вказівками людини.
Ідея Ч. Беббіджа виявилась настільки вдалою і простою водночас, що будь-який сучасний комп’ютер складається із тих самих частин (див. рис.1.3):
Рис.1.3. Структура сучасного комп’ютера
Звичайно, що кожна складова частина комп’ютера стала сама по собі надзвичайно складною: так, процесор здатний одночасно обробляти зразу декілька скадних інструкцій, пам’ять поділяється на різні типи з різною швидкодією та ємністю (оперативна, кеш-пам’ять, на жорсткому диску і т.інш.), а пристрої вводу та виводу самі по собі уявляють невеликі комп’ютери (сканери, принтери, цифрові фотокамери і т.інш.). Також надзвичайно складною частиною комп’ютера стали магістралі (шини) зв’язку між окремими компонентами комп’ютера, які на рисунку показані просто стрілками.
Але повернемось до симулятора. Отже, у лівій частині закладки “Навчальна ЕОМ” вікна симулятора можна побачити усі 5 складових частин обчислювача Ч. Беббіджа. Зверніть увагу, що у сучасних комп’ютерах арифметичний та керуючий пристрої об’єднані у одну складову частину – процесор (від англ. to process – обробляти), який не випадково називається головною частиною комп’ютера, що обробляє інформацію та керує роботою усього комп’ютера.
Пам’ять комп’ютера 1-го покоління представлена спеціальним вікном, яке відображає 8 з 4096 комірок пам’яті. Кожна комірка описується своє адресою (або номером) у лівій частині та значенням, яке у ній зберігається, у правій частині. На відміну від людини, яка користується 10вою системою числення, комп’ютер використовує лише 2 цифри – 0 та 1, тобто 2-ву систему числення. Відповідно усі числа, а також коди інструкцій всередині комп’ютера зберігаються у двійковому вигляді. Кожна комірка пам’яті здатна зберігати 16-розрядне число (або код, якщо це інструкція), яке складається з 16 двійкових цифр (які називаються розрядами або бітами). Таке 16-розрядне число називається словом (відзначимо, що у сучасних комп’ютерах кожна комірка містить не 16, а 8 двійкових розрядів, які називаються байтами). Це означає, що максимальне число, яке здатна зберігати одна комірка, дорівнює 2161 = 65535. В свою чергу, оскільки максимальна кількість комірок становить 4096, тому адреса кожної комірки складається з log24096 = 12 розрядів (оскільки у сучасних комп’ютерах адреса є 32-розрядною, тому максимальна кількість комірок може становити 232 ( 4млрд. = 4 ГБайти). Вікно пам’яті працює таким чином, щоб комірка, з якою в даний момент відбувається робота, знаходилась посередині вікна. Також біля вікна пам’яті зображено два регістри: Регістр Адреси пам’яті та Регістр Даних пам’яті. Хоча ці регістри відображені біля пам’яті, насправді вони розташовані у процесорі, з допомогою яких здійснює доступ до комірок пам’яті.
Процесор, який складається з арифметичного та керуючого пристроїв, у симуляторі представлений Арифметико-логічним пристроєм, двома регістрами пристроя управління (Регістр Інструкцій та Лічильник Адреси Інструкції) та регістрами для доступу до пам’яті (див. вище). Регістр – це комірка для запам’ятовування інформації, яка розташована у процесорі і працює з набагато більшою швидкістю у порівнянні із комірками пам’яті. Як і комірка пам’яті, регістр складається з двійкових розрядів, які у регістрі мають спеціальну назву – тригер. Відповідно кожний тригер здатний запам’ятовувати одну 2-ву цифру: 0 або 1. Кожний розряд (тригер) регістра у симуляторі представлений індикатором (кружочком), жовтий колір (“світиться”) якого відповідає 1, а сірий – 0.
Арифметико-логічний пристрій – це пристрій, який має два входи і один вихід і здатний виконувати набір арифметичних (додавання, віднімання, множення, ділення і т.інш.) та логічних (І, АБО, НІ, Виключне-АБО, І-НІ, АБО-НІ та інші) операцій. В нашому симуляторі Арифметико-логічний пристрій (АЛП) як такий не показаний, хоча обов’язково присутній і здатний виконувати арифметичні операції додавання та віднімання, логічні операції І, АБО, Виключне-АБО та НІ, а також цілий ряд операцій зсуву вліво та вправо (з якими ми познайомимось пізніше). До складу АЛП у симуляторі також віднесено ще два регістри: Акумулятор, який, як ми це побачимо в подальшому, грає одну з найголовніших ролей у роботі процесора, та Регістр Ознак, який складається з 3-х тригерів (розрядів) і відображає наступні ознаки результату операції АЛП: Z (від англ. Zero - нуль) – ознака того, що результат дорівнює 0 (індикатор “світиться”, тобто значення “1”); S (від англ. Sign – знак) – ознака того, що результат є меншим від 0 (від’ємне число); C (від англ. Carry – перенос) – ознака того, що при виконанні арифметичної операції виник перенос і результат більший ніж 65535. Акумулятор під’єднаний до одного з входів АЛП, до другого з яких під’єднується Регістр Даних пам’яті. Таким чином, АЛП здатний виконувати арифметичні та логічні операції над 2-ма числами, з яких одне повинно знаходитись у акумуляторі, а друге може розташовуватись у будь-якій комірці пам’яті, до якої АЛП звертається з допомогою Регістра Даних пам’яті. Деякі операції вимагають лише одного числа (наприклад, логічна операція НІ, а також арифметичні операції зсуву) – в цьому випадку в якості вхідного числа використовується акумулятор. Вихід АЛП під’єднується також до акумулятора – відповідно результат операції замінює (“затирає”) одне з вхідних чисел – це необхідно пам’ятати. Назва акумулятор (від англ. to accumulate – накопичувати) пояснюється тим, що більшість операцій в алгоритмі програми є взаємопов’язаними, коли результат однієї операції використовується як вхідне число у наступній операції. В цьому випадку під’єднання акумулятора до входу та виходу АЛП (див. рис.1.4) є дуже зручним:
Рис.1.4. Під’єднання входів та виходів АЛП
На рис.1.4 також пояснено, що акумулятор також під’єднаний до пам’яті через Регістр Даних комірки пам’яті, що дозволяє завантажувати до нього вхідні дані, а також зберігати результати обчислень назад до пам’яті.
Як вже говорилось раніше, доступ до пам’яті у процесорі здійснюється з допомогою двох регістрів: Регістра Даних пам’яті (Регістр Даних) та Регістра Адреси пам’яті (Регістр Адреси). Правило дуже просте – перш ніж виконувати операцію доступу до пам’яті (запис або читання), необхідно у Регістр Адреси записати адресу тієї комірки, до якої ми будемо звертатись. Якщо відбувається операція читання, тоді до Регістра Даних з пам’яті потрапляють дані (число або інструкція) із вказаної комірки. Якщо ми хочемо записати до пам’яті, то зрозуміло, що окрім адреси комірки, необхідно попередньо до Регістра Даних занести число (або інструкцію), яке ми будемо записувати до даної комірки пам’яті.
Просимо звернути увагу на надзвичайно цікаву особливість роботи комп’ютера: і дані і інструкції зберігаються в пам’яті у вигляді чисел, при чому без спеціальної інформації про те, де знаходяться дані, а де – інструкції, абсолютно неможливо відрізнити дані від інструкцій. Яким же чином їх відрізняє процесор? Саме для цього і призначені два спеціальних керуючих регістри: Регістр Інструкцій та Лічильник Адреси Інструкції. Хоча детально ці регістри будуть розглянуті у наступній лабораторній роботі, коротко відзначимо, що Лічильник Адреси Інструкції автоматично “відслідковує” адресу інструкції, яка в даний момент буде виконуватись у процесорі. А для того, щоб виконати цю інструкцію, вона зчитується з пам’яті до Регістра Інструкцій.
На цьому ми закінчуємо попередній розгляд структури комп’ютера і переходимо до розгляду пульта управління. Рекомендуємо зробити невелику паузу для того, щоб осмислити прочитане, і ще раз перечитати попередній матеріал.
Отже, пульт управління призначений для безпосередньої участі людини у роботі комп’ютера. З допомогою пульта управління програміст може “вручну” занести інформацію (дані або інструкції) до внутрішніх регістрів процесора, а також виконувати операції запису та читання з пам’яті. Крім того, з допомогою пульта управління програміст “запускає” комп’ютер для виконання програми, яка знаходиться у пам’яті.
Головною частиною пульта управління є набірне поле з 16 перемикачів, які можуть знаходитись у 2-х станах: “натиснуто” і “ненатиснуто” (відповідно “1” та “0”) Усі перемикачі пронумеровані від 0 до 15 справа наліво і відповідають розрядам 16-розрядного двійкового числа від наймолодшого розряду (0) до найстаршого (15). Поряд із набірним полем знаходяться 5 кнопок, які дозволяють “занести” значення набірного поля у один з внутрушніх регістрів процесора: РА – Регістр Адреси пам’яті, РД – Регістр Даних пам’яті, А – акумулятор, РІ – Регістр Інструкцій та ЛАІ – Лічильник Адреси Інструкції. Оскільки регістри РА та ЛАІ, пов’язані із адресами комірок пам’яті, є 12-розрядними, тому при “занесенні” значення набірного поля до них потрапляють 12 молодших розрядів (від 0-го до 11-го). Для того, щоб “скинути” усі розряди набірного поля в 0, використовується спеціальна кнопка “Скидування...”.
Для роботи із комірками пам’яті використовується поле “Операція з пам’ятю” у верхній частині пульта управління. Як вже зазначалось вище, перш ніж виконувати операції запису або читання (кнопки “Запис” та “Читання”), необхідно у Регістр Адреси занести адресу потрібної комірки, а у випадку операції запису – також до Регістра Даних занести число, яке буде записуватись. Якщо операція доступу до пам’яті буде виконуватись із групою комірок, які розташовані підряд, то в цьому випадку зручно використовувати кнопку “+1”, яка автоматично збільшує значення Регістра Адреси на 1. Так, це зручно, коли необхідно “обнулити” ряд комірок (занести число 0) після включення живлення. Така необхідність може пояснюватись тим, що в оперативній пам’яті після включення живлення з’являються абсолютно випадкові числа. Що стосується нашого симулятора, то як і в комп’ютерів 1-го покоління, які використовували феритову пам’ять з магнітним принципом запам’ятовування, після включення живлення “відновлюється” стан (який насправді і не зникав) усіх комірок пам’яті.
Тепер, нарешті, перейдемо до кнопки “Пуск” внизу пульта управління та розгляду 3-х основних режимів роботи комп’ютера: автоматичний, покроковий та потактовий. Кнопка “Пуск” “примушує” процесор почати виконувати інструкції, які знаходяться в пам’яті, починаючи з комірки, на яку вказує лічильник адреси інструкцій. При цьому в залежності від обраного режиму виконання процесор буде виконувати програму наступним чином:
у автоматичному режимі будуть виконуватись підряд усі інструкції до тих пір, доки не зустрінеться інструкція зупинки HLT (від англ. to halt – зупинятись), натиснута кнопка “Стоп” або не буде досягнуто кінець пам’яті. Нагадаємо собі, що процесор не зможе відрізнити даних від інструкцій, якщо програміст вчасно не розмістить інструкцію HLT – інакше поведінка комп’ютера може бути непередбачуваною;
у покроковому режимі виконається лише одна інструкція, на яку вказує Лічильник Адреси Інструкції, після чого Лічильник Адреси Інструкції вкаже на наступну інструкцію і процесор зупиниться до наступного натискання кнопки “Пуск”;
у потактовому режимі виконається лише один мікрокрок, з послідовності яких насправді складається виконання одніє інструкції. Тепер ми знаємо, що один такт роботи процесора (тривалість одного такту роботи процесора tclk є оберненою величиною до тактової частоти процесора fclk; для fclk = 2,5 ГГц tclk = 1/2,5(109Гц = 400пікосек = 4(1010сек) ще не означає виконання однієї інструкції процесора, виконання якої в залежності від складності може вимагати від 4-5 до декількох десятків тактових періодів процесора. Наприклад, інструкція інвертування акумулятора (логічна операція НІ зміни значень усіх розрядів на протилежні) вимагає 5 мікрокроків (тактів роботи процесора):
занести значення Лічильника Адреси Інструкції до Регістра Адреси пам’яті;
прочитати інструкцію з пам’яті до Регістра Даних пам’яті;
перенести інструкцію з Регістра Даних пам’яті до Регістра Інструкцій;
виконати в АЛП операцію інвертування Акумулятора і занести результат до Акумулятора;
збільшити значення Лічильника Адрес Інструкції на 1.
Потактовий режим призначений для дослідження виконання інструкції (див. лаб.роб.№2), покроковий – для дослідження виконання програми, а автоматичний – це стандартний режим роботи комп’ютера, коли уся програма виконується миттєво без участі людини, при цьому програміст бачить вже готові результати роботи програми. Зрозуміло, що у випадку помилки програміста процесор може виконувати непередбачувані дії (“тлумачити” дані як інструкції) або потрапляти у нескінчені цикли (коли той самий фрагмент програми повторюється знову і знову). В таких випадках говорять про “зависання” або “зациклення” програми. В сучасних комп’ютерах така ситуація вимагає лише закриття такої програми, тоді як у попередні роки помилка призводила до “зависання” усього комп’ютера (що вимагало його перезавантаження). Так от, для уникнення такої ситуації і для створення можливості відлагодження програми використовується поле “Зупинка за адресою”: з допомогою 12-розрядної Адреси зупинки можна встановити адресу інструкції, на якій процесор буде зупиняти виконання програми. Для того, щоб точка зупинки почала працювати, її необхідно “Ввімкнути...”.
І, наприкінці, зазирнемо у закладку “Документація до “Навчальної ЕОМ” для того, щоб познайомитись з інструкціями процесора (див. рис.1.5). Для цього необхідно в свою чергу активізувати закладку “Набір інструкцій ЕОМ” внизу вікна симулятора:
Рис.1.5. Набір інструкцій процесора навчальної ЕОМ
Як видно на рисунку, процесор навчальної ЕОМ містить 26 інструкцій. Будь-яка інструкція описується її двійковим кодом (в якому буква “a” означає двійковий розряд 12-розрядної адреси, а “x” – довільне двійкове значення), мнемонікою (символьним позначенням, яке у більшості випадків є скороченням або абревіатурою англійських слів, що описують операцію даної команди), скороченим описом операції, яка буде виконуватись та впливом на регістр ознак (“–” – не впливає, “*” – впливає згідно з результатом операції, “0” – встановлює в 0). Усі команди можна розділити на адресні та безадресні. У адресних командах найстарші 4 розряди (біти) містять код інструкції, який визначає операцію, що буде виконувати дана інструкція (наприклад, команда читання з пам’яті LOAD – 0000, команда додавання ADD – 0010, а команда безумовного переходу JMP – 1110). Відповідно у молодших 12 розрядах розташована адреса комірки пам’яті, у якій розташовано один з операндів операції (наприклад, для інструкції AND логічної операції І ) або у якій розташовано наступну інструкцію, яка буде виконуватись (команда JMP). У випадку безадресних команд код інструкції може займати 6 або 7 старших розрядів, тоді як решта молодших розрядів не використовуються. Оскільки 25 = 32, то це означає, що 5 старших розрядів могло б вистачити для кодування усіх 26-ти інструкцій, але з метою об’єднання подібних інструкцій у групи з подібними кодами розробники симулятора використали більшу кількість розрядів для кодування безадресних інструкцій (фактично старших 4 розряди визначають код групи інструкцій). Більш детально набір інструкцій навчальної ЕОМ буде розглянуто у лабораторній роботі №2.
2. Порядок виконання роботи:
Ознайомитись з теоретичними відомостями до лабораторної роботи №1.
Запустити програму “Симулятор навчальної ЕОМ”.
З допомогою набірного поля записати до регістрів процесора наступні значення: РА – 010101010101, РД – 0011001100110011, А – 0000111100001111, РІ – 0000000011111111, ЛАІ – 101010101010.
Записати до 5-ти сусідніх комірок пам’яті з адресами 20, 21, 22, 23 та 24 (перевести у двійкову систему числення) числа 16, 17, 18, 19, 20 (перевести у двійкову систему числення).
Занести у пам’ять, починаючи з комірки 0, програму, яка додаватиме 10-ту та 11-ту комірки пам’яті і результат запише до 12-ї комірки. Попередньо у 10-ту та 11-ту комірки занести числа, які вкаже викладач.
Відповідна програма матиме наступний вигляд:
LOAD 10 – завантажити (прочитати) значення 10-ї комірки до акумулятора;
ADD 11 – додати до акумулятора значення 11-ї комірки і результат зберегти у акумуляторі;
STORE 12 – зберігти (записати) значення акумулятора до 12-ї комірки;
HALT – зупинити роботу процесора.
У двійковому представленні дана програма матиме наступний вигляд:
0000 0000 0000 1010;
0010 0000 0000 1011;
0001 0000 0000 1100;
0111 1100 0000 0000.
Відповідно першу інструкцію (код) необхідно занести до комірки з адресою 0000 0000 0000, другу – у комірку 0000 0000 0001, третю – у комірку 0000 0000 0010, а четверту – у комірку 0000 0000 0011.
Після того, як у 10-ту (0000 0000 1010) та у 11-ту (0000 0000 1011) комірки будуть занесені задані викладачем числа, необхідно у Лічильнику Адреси Інструкції з допомогою набірного поля встановити адресу першої інструкції, тобто 0000 0000 0000.
Виконати програму у автоматичному режимі і перевірити результат у 12-й комірці (прочитати значення 12-ї комірки).
Обнулити 12-ту комірку і ще раз виконати цю програму, але у покроковому режимі (попередньо встановивши у ЛАІ знову адресу 0). Після виконання кожної інструкції записати усі зміни у регістрах процесора (особливу увагу звернути на Лічильник Адреси Інструкції, Акумулятор, Регістр Адреси, Регістр Даних та Регістр Ознак).
Оформити та захистити звіт з лабораторної роботи.
3. Вимоги до оформлення звіту з лабораторної роботи.
Звіт з лабораторної роботи оформляється на чистих аркушах формату А4 (210х297мм) з однієї сторони від руки або у друкованому вигляді. До складу звіту повинні входити:
Титульна сторінка стандартного взірця, приклад якої наведено нижче.
Тема та мета лабораторної роботи.
Теоретичні відомості (обсягом від 0,5 до 1 сторінки). У теоретичних відомостях необхідно коротко вказати найголовнішу інформацію, отриману з методичних вказівок та пояснень викладача. Забороняється переписувати теоретичні відомості з методичних вказівок.
Хід роботи. Необхідно у відповідності до завдання з порядку виконання роботи точно описати виконувані дії. Наприклад, хід виконання 4-го пункту завдання може виглядати наступним чином:
4. У набірному полі у молодших 12 розрядах у двійковій системі числення вводжу адресу 10 першої комірки – 0000 0000 1010. З допомогою кнопки “РА” заношу цю адресу до Регістра Адреси пам’яті. У набірному полі вводжу перше число 12 – 0000 0000 0000 1100. З допомогою кнопки “РД” заношу це число до Регістра Даних пам’яті. З допомогою кнопки “Запис” заношу число 12 у комірку з адресою 10. З допомогою кнопки “+1” збільшую значення Регістра Адреси на 1. У набірному полі змінюю молодший розряд для отримання числа 13 – 0000 0000 0000 1101. Кнопкою “Запис” заношу число 13 у 11-ту комірку. Таким самим чином число 14 заношу у 12-ту комірку, число 15 – у 13-ту, а 16 – у 14-ту.
Як видно з наведеного прикладу, детального пояснення вимагає перше виконання тої або іншої дії. При повторному виконанні тієї самої дії її опис можна скорочувати, але таким чином, щоб це було зрозумілим. Відповідно у наступних лабораторних роботах у детальному поясненні пройденого матеріалу необхідності немає. При недостатньо детальному поясненні або підозрі на списування викладач має право запитати, як студент виконував ту або іншу дію, попросити продемонструвати це на комп’ютері або вимагати переписування звіту.
Висновки (не більше 0,5 сторінки). У висновках необхідно коротко сформулювати основну ідею даної лабораторної роботи, висловити свої позитивні та негативні враження, а також по можливості запропонувати покращення (до симулятора, методичних вказівок, завдання тощо).