Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра CКС
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.”
Тема: Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.
Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;
2. Засвоїти призначення регістра ознак процесора;
3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.
4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та
навчитися досліджувати хід виконання окремих інструкцій.
Теоретичні відомості
Звернімося до малюнку 2.3, на якому зображена таблиця “Набір інструкцій навчального комп’ютера DeComp”. Усі інструкції у навчальному комп’ютері можна поділяти за такими напрямками:
За форматом коду інструкції;
За призначенням.
Нагадаємо, що за форматом коду інструкції є адресні та безадресні (див. розділ ІІ “Опис архітектури навчального комп’ютера DeComp”). Безадресні інструкції взагалі не використовують будь-які операнди, як, наприклад, інструкція 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 - завантажувати).
Дивимося на рис. 2.3: машинний код цієї інстркції – 0000 aaaa aaaa aaaa; виконання – (ADDR) ( Акумулятор.
Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. Наприклад, для того, щоб прочитати число з 15-ї або 2041-ої комірки пам’яті і записати його до акумулятора, необхідно використати :
Мнемонічний запис
Машинний код
LOAD 15
0000 0000 0000 1111
LOAD 2041
0000 1111 1111 1001
2) STORE ADR - зберегти (від англ. Store - зберігати)
Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор ( (ADDR)).
Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Наприклад, щоб записати значення вмісту акумулятора до 148-ї або 2043 комірки, необхідно використати такі машинні коди:
Мнемонічний запис
Машинний код
STORE 148
0001 0000 1001 0100
STORE 2043
0001 1111 1111 1011
Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом, через який відбудеться передача.
Так, програма з двох інструкцій:
Мнемонічний запис
Машинний код
LOAD 28
0000 0000 0001 1100
STORE 56
0001 0000 0011 1000
виконує переміщення 16-розрядного числа, яке знаходилось у 28-й комірці пам’яті, до 56-ї комірки. Відзначимо, що інструкція читання (завантаження) LOAD не знищує числа у 28-ій комірці. Після виконання у цій програмі інструкції запису (збереження) STORE, код числа з 28-ої комірки пам’яті буде скопійований до 56-ої комірки, а у акумуляторі залишиться те саме 16-розрядне число з 28-ї комірки.
1.2. Інструкції арифметичних операцій:
1) ADD ADR – арифметичне додавання (від англ. Addition -додавання)
Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) ( Акумулятор.
Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат.
Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора.
Нехай нам потрібно додати 3 числа, які знаходяться у 21-й, 22-й та 23-й комірках пам’яті, а результат необхідно зберегти в 25-й комірці. Відповідна програма у мнемонічних кодах матиме вигляд:
Машинний код
Мнемонічний запис
Коментар
0000 0000 0001 0101
LOAD 21
зчитування 1-го операнда з пам’яті до акумулятора
0010 0000 0001 0110
ADD 22
додавання вмісту акумулятора (числа з 21-ої комірки) і вмісту 22-ої комірки пам’яті. Тепер у акумуляторі знаходиться перший проміжний доданок
0010 0000 0001 0111
ADD 23
додавання першого проміжного доданку, що знаходиться у акумуляторі, з вмістом 23-ої комірки пам’яті. Тепер у акумуляторі – другий проміжний доданок – результат додавання трьох чисел
0001 0000 0001 1001
STORE 25
збереження результату у 25-й комірці пам’яті. Числовий код результату копіюється до 25-ї комірки і він же залишається у акумуляторі. У машинних кодах ця програма матиме наступний вигляд
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, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. Так, наприклад, перенос виникне і, відповідно, встановиться тригер C, якщо додати два 16-ти розрядних числа у 16-ти розрядному процесорі:
- результат – 17-ти розрядне число.
Відслідковувати виникнення переносу (ознака – C) або від’ємного результату (ознака – S) повинен сам програміст і це дуже важлива задача, оскільки є головною умовою отримання коректного, правильного результату. Адже, наприклад, у розглянутому прикладі, якщо не врахувати виникнення переносу, отримаємо: 22 375 + 47 733 = 4 572 (замість 70 108). Які дії треба виконувати для корекції помилкових результатів – це питання буде розглядатися при вивченні алгоритмів виконання арифметичних операцій у наступних роботах.
Деколи різні ознаки результату можуть з’являтися одночасно. Які ознаки встановлюються і якою інструкцією подано на рис. 2.3. Наприклад, інструкція віднімання SUB може встановлювати усі три ознаки: Z, S та C. Насправді, операція віднімання здійснюється з використанням доповняльного коду, з яким ми познайомимось трохи пізніше.
1.4. Дослідження виконання інструкцій навчального комп’ютера
Для дослідження алгоритмів і ходу виконання програм за окремими інструкціями існує покроковий режим роботи навчального комп’ютера, з яким ми ознайомилися у лабораторній роботі № 1.
Загальний принцип виконання однієї інструкції ми вже знаємо: спочатку її необхідно прочитати з пам’яті, а потім, у залежності від коду операції, виконати ті або інші необхідні дії. Це і є найбільш спрощений порядок виконання інструкції:
вибірка (читання) інструкції (fetch – вибір, виклик). ;
виконання інструкції (execution –виконання).
Оскільки більшість інструкцій призначені для виконання різних операцій, для яких необхідні вхідні числа, а також збереження результату, для більшості процесорів комп’ютерів стандартним є такий, більш детальний порядок виконання інструкцій:
вибірка інструкції;
декодування (розпізнавання) інструкції;
вибірка (читання) операндів;
виконання операції (арифметичної, логічної чи якоїсь іншої);
збереження (запис) результату.
У порівнянні із попереднім, простішим порядком виконання інструкції, у детальнішому порядку етап вибірки інструкції розділився на 2 частини: вибірку та декодування (розпізнавання) інструкції. Дійсно, етап декодування є надзвичайно важливим: він фактично є функцією пристрою керування, який повинен розпізнати (декодувати) інструкцію за її кодом операції, а також згенерувати послідовність керуючих сигналів, які спричинять виконання усіх наступних етапів.
Крім того, 2-й етап – виконання інструкції – розділився на 3 частини: вибірку операндів, виконання операції та збереження результату. При цьому, під читанням та записом маються на увазі операції звертання до пам’яті.
Але насправді виконання інструкції складається з ще більшої кількості етапів.
Для дослідження порядку виконання окремих інструкцій у процесорі призначений 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 мс.
1-й такт. Натиснемо кнопку ПУСК. У результаті спочатку синім кольором засвітиться лічильник адреси інструкції (ЛАІ), а потім білим – регістр адреси пам’яті (РА) і значення ЛАІ опиниться у РА, тобто код розміщення нашої першої (і єдиної) інструкції - 0000 0000 0000. Дійсно, перш ніж прочитати інструкцію з пам’яті, необхідно до РА занести її адресу. Оскільки за адресами інструкцій слідкує ЛАІ, то саме з нього ми беремо потрібну нам адресу: ЛАІ ( РА. Такий скорочений формат запису цього такту можна тлумачити таким чином: вміст регістру ЛАІ (де розміщена адреса інструкції) переноситься до РА.
2-й такт. Ще раз натиснемо кнопку ПУСК (Власне для виконання кожного такту потрібно натискати ПУСК). Тепер синім кольором засвітиться вікно пам’яті, а білим – регістр даних пам’яті (РД), тобто значення (вміст) виділеної комірки пам’яті (на яку вказує РА) зчитується і записується до РД – у нашому випадку - 0010 0000 0000 0001. Зараз машинний код інструкції вже прочитаний з пам’яті, але поки що знаходиться у регістрі даних:
ПамРА ( РД.
3-й такт: Синій – РД, білий – регістр інструкції (РІ), тобто ми переносимо машинний код інструкції з РД до спеціального регістра – РІ. Саме з нього процесор може декодувати інструкцію, що і відбувається на цьому ж 3-му кроці. З точки демонстрації дія декодування абсолютно непомітна – це внутрішній процес пристрою управління, але після нього процесор вже точно знає, які саме дії необхідно виконувати саме у цій інструкції:
РД ( РІ.
4-й такт. Оскільки команда додавання ADD використовує один з операндів, який знаходиться у пам’яті, тому на 4-му кроці значення адреси операнда (тобто 0000 0000 0001) з регістру інструкцій РІ заноситься до РА:
АДР (РІ) ( РА.
5-й такт. Операнд (тобто, двійковий код числа 1510 - 0000 0000 0000 1111) зчитується з пам’яті і записується до РД:
Пам(РА) ( РД.
6-й такт. Тепер ми маємо обидва операнди: один попередньо занесений у акумуляторі (0000 0000 1111 0000), а другий – у РД. Відповідно, на 6-му кроці виконується операція додавання і результат записується до акумулятора (0000 0000 1111 1111):
А + РД ( А.
Відзначимо, що виконання будь-якого етапу закінчується операцією запису якогось проміжного результату до одного з регістрів процесора або пам’яті. Так, сама операція додавання не потребує запису – вона є “наскрізною”: будь-яка зміна чисел (операндів) на входах АЛП призводить до майже миттєвої зміни на його виході. А от запис результату до акумулятора і визначає закінчення 6-го кроку.
7-й такт. Оскільки операція додавання є арифметичною, тому вона впливає на усі 3 прапорці регістру ознак (РО). Внутрішні схеми процесора аналізують у акумуляторі результат виконання операції (у нас – додавання) і включають, при необхідності, відповідний прапорець: Z, S, C (A) ( РО. (Хоча у нашому випадку жодна з ознак не змінюється).
8-й такт. На цьому виконання нашої інструкції ADD можна вважати закінченим. Залишився один маленький крок, хоча й надзвичайно важливий: підготувати адресу наступної інструкції. Якщо цього не зробити, процесор знову і знову виконуватиме ту ж саму інструкцію ADD:
ЛАІ + 1 ( ЛАІ.
У нашому випадку, замість інструкції у наступній комірці 0000 0000 0001, виявиться наше число 1510 = (0000 0000 0000 1111)2, але оскільки наша програма складається лише з однієї інструкції, то усе добре. Правильніше було б наш операнд записати до комірки, яка гарантовано не попадає у зону адрес роботи програми.
Отже, виконання інструкції 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.
Порядок виконання роботи
Ознайомитись з теоретичними відомостями до лабораторної роботи № 2.
2. Описати призначення прапорців Регістру Ознак;
Регістр Ознак призначений для відображання результату операції АЛП. Він складається з 3 тригерів: Z (від англ. Zero - нуль) – ознака того, що результат операції дорівнює 0;
S (від англ. Sign – знак) – ознака того, що результат є < 0 (тобто - від’ємне число);
C (від англ. Carry – перенесення) – ознака того, що при виконанні арифметичної операції виникло переповнення розрядної сітки акумулятора і перенесення (тобто результат більший за 65535).
Коли індикатор відповідного тригера світиться, тобто значення його є “1”, це означає, що відбулася подія, яку відслідковує даний розряд регістра ознак.
3. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0000 0000 0000 1010
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0000 0000 0000 1010
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 1010
вибір адреси 1-го операнда
5
РА ( РД
0000 0000 0000 0101
вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних
6
РД ( А
0000 0000 0000 0101
Запис 1-го операнда з пам’яті в Акумулятор
7
ЛАІ
0000 0000 0001
підготовка адреси нової інструкції
8
ЛАІ ( РА
0000 0000 0001
вибір адреси 2-ої інструкції і занесення її до Регістра Адреси
9
РА ( РД
0010 0000 0000 1011
вибір коду інструкції з РА і занесення його до Регістра Даних
10
РД ( РІ
0010 0000 0000 1011
декодування інструкції у Регістрі Інструкцій
11
РІ ( РА
0000 0000 1011
вибір адреси 2-го операнда
12
РА ( РД
0000 0000 0000 0110
вибір коду 2-го операнда з пам’яті і запис його до Регістру Даних
13
РД(А
0000 0000 0000 1011
Додавання 2 чисел. Результат записаний у Акумуляторі
14
А(РО
Відображення результату на Регістрі Ознак
15
ЛАІ
0000 0000 0010
підготовка адреси нової інструкції
16
ЛАІ ( РА
0000 0000 0010
вибір адреси 3-ої інструкції і занесення її до Регістра Адреси
17
РА ( РД
0001 0000 0000 1100
запис 3-ої інструкції до Регістру Даних
18
РД ( РІ
0001 0000 0000 1100
декодування інструкції у Регістрі Інструкцій
19
РІ ( РА
0000 0000 1100
запис 3-ої інструкції до Регістру Адреси для виконання
20
РА ( РД
0000 0000 0000 1011
запис 3-ої інструкції до Регістру Даних для виконання
21
А( РД
0000 0000 0000 1011
Запис результату до 12-ої комірки
22
ЛАІ
0000 0000 0011
підготовка адреси нової інструкції
23
ЛАІ ( РА
вибір адреси 4-ої інструкції і занесення її до Регістра Адреси
24
РА ( РД
0111 1100 0000 0000
Запис 4-ої інструкції до Регістру Даних
25
РД ( РІ
0111 1100 0000 0000
декодування інструкції у Регістрі Інструкцій
4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати.
За допомогою пульта управління занесемо: до 0-ї комірки пам’яті машинний код інструкції LOAD – де 0000 – код інструкції,0000 0000 0101- адрес комірки,де збережено 1 число.До 1-ї комірки пам’яті машинний код інструкції SUB – де 0011 – код інструкції,0000 0000 0110- адрес комірки,де збережено 2 число..До 3-ї комірки пам’яті машинний код інструкції STORE – де 0001 – код інструкції,0000 0000 0111- адрес комірки,де буде збережено результат.
А>B
За допомогою набырного поля до 5-ї комірки – число 10 (двійковий код = 0000 0000 0000 1010), а до 6-ї комірки число 5 (двійковий код = 0000 0000 0000 0101).
Машинний код
Мнемонічний запис
Коментар
0000 0000 0000 0101
LOAD 5
Зчитування числа А з 5 комірки і запис в акумулятор
0011 0000 0000 0110
SUB 6
Віднімання чисел А, яке розміщене у акумуляторі і В,яке роpміщене у 6 комірці пам’яті
0001 0000 0000 0111
STORE 7
Запис результату з акумулятора в 7 комірку пам’яті
Хід виконання програми у покроковому режимі див. у Таблиці 1.1
Після виконання програми ми отримали у Акумуляторі значення 5.
А=B
до 5-ї комірки – число 5 (двійковий код = 0000 0000 0000 0101), а до 6-ї комірки число 5 (двійковий код = 0000 0000 0000 0101).
Машинний код
Мнемонічний запис
Коментар
0000 0000 0000 0101
LOAD 5
Зчитування числа А з 5 комірки і запис в акумулятор
0011 0000 0000 0110
SUB 6
Віднімання чисел А, яке розміщене у акумуляторі і В,яке роpміщене у 6 комірці пам’яті
0001 0000 0000 0111
STORE 7
Запис результату з акумулятора в 7 комірку пам’яті
Хід виконання програми у покроковому режимі див. у Таблиці 1.2
Після виконання програми ми отримали у Акумуляторі значення 0.
А<B
до 5-ї комірки – число 1 (двійковий код = 0000 0000 0000 0101), а до 6-ї комірки число 2 (двійковий код = 0000 0000 0000 0001)
Машинний код
Мнемонічний запис
Коментар
0000 0000 0000 0101
LOAD 5
Зчитування числа А з 5 комірки і запис в акумулятор
0011 0000 0000 0110
SUB 6
Віднімання чисел А, яке розміщене у акумуляторі і В,яке роpміщене у 6 комірці пам’яті
0001 0000 0000 0111
STORE 7
Запис результату з акумулятора в 7 комірку пам’яті
Хід виконання програми у покроковому режимі див. у Таблиці 1.3
5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
1) LOAD
Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. За допомогою пульта управління занесемо: до 0-ї комірки пам’яті машинний код інструкції LOAD – де 0000 – код інструкції,0000 0000 0001- адрес першої комірки,де збережено число запису (код інсрукції 0000 0000 0000 0001); до 1-ї комірки занесем число 5 (двійковий код = 0000 0000 0000 0101). У результаті виконання цієї інструкції у акумуляторі ми повинні отримати значення 5 (машинний код - 0000 0000 0000 0101). Для початку виконання інструкції до ЛАІ - лічильника адреси інструкцій - занесемо адресу розміщення першої інструкції LOAD, тобто - 0000 0000 0000, а також встановимо потактовий режим роботи симулятора відповідною кнопкою вибору режиму.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0000 0000 0000 0001
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0010 0000 0000 0001
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 0001
вибір адреси числа
5
РА ( РД
0000 0000 0000 0101
вибір коду числа з пам’яті і запис його до Регістру Даних
6
РД ( А
0000 0000 0000 0101
виконання операції запису
8
ЛАІ+1 ( ЛАІ
0000 0000 0001
підготувати адресу наступної інструкції
2) STORE
Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. За допомогою пульта управління занесемо: до 0-ї комірки пам’яті машинний код інструкції STORE – де 0001 – код інструкції,0000 0000 0001- адрес першої комірки,де збережено число запису (код інсрукції 0001 0000 0000 0001); до акумулятора занесем число 5 (двійковий код = 0000 0000 0000 0101). У результаті виконання цієї інструкції у 1-ій комірці ми повинні отримати значення 5 (машинний код - 0000 0000 0000 0101). Для початку виконання інструкції до ЛАІ - лічильника адреси інструкцій - занесемо адресу розміщення першої інструкції STORE, тобто - 0000 0000 0000, а також встановимо потактовий режим роботи симулятора відповідною кнопкою вибору режиму.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0001 0000 0000 0001
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0001 0000 0000 0001
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 0001
вибір адреси числа
5
А ( РД
0000 0000 0000 0101
вибір коду числа з акумулятораі і запис його до Регістру Даних
6
РД ( РА
0000 0000 0000 0101
виконання операції запису
7
ЛАІ+1 ( ЛАІ
0000 0000 0001
підготувати адресу наступної інструкції
3) SUB
Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися.За допомогою пульта управління занесемо: до 0-ї комірки пам’яті машинний код інструкції SUB – де 0011 – код інструкції,0000 0000 0001- адрес першої комірки,де збережено число запису (код інсрукції 0011 0000 0000 0001); до акумулятора занесем число 5 (двійковий код = 0000 0000 0000 0101).До першої комірки занесемо число 1. У результаті виконання цієї інструкції у акумуляторі ми повинні отримати значення 4 (машинний код - 0000 0000 0000 0100). Для початку виконання інструкції до ЛАІ - лічильника адреси інструкцій - занесемо адресу розміщення першої інструкції STORE, тобто - 0000 0000 0000, а також встановимо потактовий режим роботи симулятора відповідною кнопкою вибору режиму.
№
Мнемонічний запис
Код, що обробляється
Коментар
1
ЛАІ ( РА
0000 0000 0000
вибір адреси 1-ої інструкції і занесення її до Регістра Адреси
2
РА ( РД
0011 0000 0000 0001
вибір коду інструкції з РА і занесення його до Регістра Даних
3
РД ( РІ
0011 0000 0000 0001
декодування інструкції у Регістрі Інструкцій
4
РІ ( РА
0000 0000 0001
вибір адреси числа
5
РА ( РД
0000 0000 0000 0001
Занесення числа з першої комірки пам’яті ло Регістру Даних
6
РД ( А
0000 0000 0000 0100
Віднімання чисел
7
А ( РО
0000 0000 0001
встановлення прапорців регістру ознак
8
ЛАІ+1 ( ЛАІ
0000 0000 0001
підготувати адресу наступної інструкції
6. Оформити та захистити звіт з лабораторної роботи.
Висновок: на лабораторній роботі я засвоїв порядок виконання програм у комп’ютері, ознайомився з форматом та набором інструкцій симулятора навчальної ЕОМ, засвоїв формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій; засвоїв призначення регістра ознак процесора; ознайомився з потактовим режимом роботи навчального комп’ютера. засвоїв базовий порядок виконання інструкції навчального комп’ютера та навчився досліджувати хід виконання окремих інструкцій.
№ кроку
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 0101
0000 0000 0000 1010
0000 0000 0000 1010
0000 0000 0000 0101
0000 0000 0001
2-й крок
0000 0000 0110
0000 0000 0000 0101
0000 0000 0000 0101
0011 0000 0000 0110
0000 0000 0010
3-й крок
0000 0000 0111
0000 0000 0000 0101
0000 0000 0000 0101
0001 0000 0000 0111
0000 0000 0011
4-й крок
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0101
0111 1100 0000 0000
0000 0000 0011
Таблиця 1.1
№ кроку
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 0101
0000 0000 0000 0101
0000 0000 0000 0101
0000 0000 0000 0101
0000 0000 0001
2-й крок
0000 0000 0110
0000 0000 0000 0101
0000 0000 0000 0000
0011 0000 0000 0110
0000 0000 0010
Z
3-й крок
0000 0000 0111
0000 0000 0000 0000
0000 0000 0000 0000
0001 0000 0000 0111
0000 0000 0011
Z
4-й крок
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0000
0111 1100 0000 0000
0000 0000 0011
Z
Таблиця 1.2
№ кроку
РА
РД
А
РІ
ЛАІ
РО
1-й крок
0000 0000 0101
0000 0000 0000 0001
0000 0000 0000 0001
0000 0000 0000 0101
0000 0000 0001
2-й крок
0000 0000 0110
0000 0000 0000 0101
1111 1111 1111 1111
0011 0000 0000 0110
0000 0000 0010
S ; C
3-й крок
0000 0000 0111
1111 1111 1111 1111
1111 1111 1111 1111
0001 0000 0000 0111
0000 0000 0011
S ; C
4-й крок
0000 0000 0011
0111 1100 0000 0000
1111 1111 1111 1111
0111 1100 0000 0000
0000 0000 0011
S ; C
Таблиця 1.3