metod lab OFK

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”









Лабораторний практикум
з дисципліни
"ОРГАНІЗАЦІЯ ТА ФУНКЦІОНУВАННЯ КОМП'ЮТЕРІВ"


Навчальний посібник


для студентів напрямку 6.0915 “Комп’ютерна інженерія”







Затверджено
На засіданні кафедри ЕОМ
Протокол № від 2007 р.












Львів - 2007

Лабораторний практикум з дисципліни "Організація та функціонування комп'ютерів"/ Навчальний посібник для студентів напрямку 6.0915 Комп’ютерна інженерія / Укл. Р.Б. Дунець, О.Т. Кудрявцев. – Львів: Видавництво Національного університету Львівська політехніка, 2007. - с.




Укладачі Дунець Р. Б., д.т.н., проф.
Кудрявцев О. Т., ст. викладач


Рецензент . . . .


Відповідальний за випуск Мельник А.О., д.т.н., проф.


Лабораторний практикум орієнтований на студентів першого курсу напрямку 6.0915 Комп’ютерна інженерія, які почали вивчати курс Організація та функціонування комп’ютерів і повинні засвоїти основи побудови процесорів, організацію взаємодії основних пристроїв комп’ютерів, початки програмування на низькому рівні, а також засвоїти практичні навички з арифметики двійкових чисел у форматах, що застосовуються у комп'ютерах. Для цього студенти повинні володіти початковими знаннями з математики і інформатики.
Як комп’ютери, так і комп’ютерні системи складаються, як відомо, з апаратних засобів (hardware – “тверда” складова) та програмного забезпечення (software - “м’ягка” складова), що взаємодіють і забезпечують виконання програм. Конкретні реалізації комп’ютерів і систем з часом змінюються, але ідеї, що лежать у їх основі, залишаються незмінними. Усі апаратні і програмні компоненти, з яких складаються обчислювальні системи і які виконують одні й ті ж самі функції, подібні одна на одну.
Сучасні комп’ютери та операційні системи – не дуже сприятливе середовище для початкового етапу вивчення організації ЕОМ. Одним з можливих рішень цієї проблеми може бути створення програмних моделей навчальних комп’ютерів, які, з одного боку, достатньо прості, щоби той, хто навчається міг засвоїти базові поняття архітектури (система команд, командний цикл, адресація, способи взаємодії процесора з пам’яттю та зовнішніми пристроями), з іншого боку – архітектурні особливості моделі повинні відповідати тенденціям сучасних ЕОМ.
Лабораторний практикум базується на програмній моделі DeComp, розробленій на кафедрі ЕОМ. Ця програмна модель дозволяє реалізувати доступ до різних елементів комп’ютера, що забезпечує зручність і наочність для студентів. З іншого боку, модель дозволяє ігнорувати ті особливості роботи реального комп’ютера, які на даному рівні розгляду не є суттєвими.

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

1.1. Коротка історія розвитку комп’ютерної техніки

Вже на початку своєї історії людство зустрілося з потребою виконання певних обчислень (наприклад, у торгових і мінових операціях) і зробило перші спроби полегшити цей процес. Спочатку виконувався рахунок “на пальцях”, а потім їм на заміну прийшли патички, камінці, мушлі або кісточки на шнурочку (які називалися “калькулі” – це прототип відомої нам рахівниці). З часом, з метою можливості запам’ятовування та опрацювання чисел, були створені способи рахування на бирках, зарубках, вузлах та ін.
Широке застосування у стародавніх народів отримали спеціальні рахункові пристрої:
абак, винайдений у Вавілоні біля 3000 тис. років до н. е., широко застосовувався у країнах навколо Середземного моря. Мав вигляд дошки, яку посипали піском і робили у ньому лунки для різних розрядів чисел, а потім камінцями у лунках формували числа. Для виготовлення застосовувалися висушена глина (Месопотамія), дерево (дошка з острова Саламин, що поблизу Афин), мармур (у Римі).
серобан у Японії,
суан-пан застосовувався у Китаї приблизно за 500 років до н. е.
У перелічених пристроях камінці, зернятка або кісточки, що розміщені на визначених місцях (колонках або рядках), мають різне числове значення, тобто у них використовувалася позиційна система числення.
Починаючи з XVII сторіччя, коли закладалися наукові основи сучасних наук – фізики і хімії, математики і астрономії, з'являються лічильні пристрої, основою яких є механізм, побудований на зубчастих колесах і ступінчастих валиках. Такі пристрої, що називалися “арифмометр” випускалися серійно з кінця XIX і до середини XX сторіччя.
У 1832 році англійський математик, профессор Кембріджського університету Чарльз Беббідж (Charles Babbage, 1792 – 1871), винахідник спідометра, розробив і сконструював різницеву машину. Ця механічна машина могла тільки додавати і віднімати, оперувала шестирозрядними числами і різницями другого порядку. ЇЇ використовували для обчислення таблиць чисел для морської навігації. У машину був закладений тільки один алгоритм – метод кінцевих різниць з використанням поліномів.
У 1836 році Беббідж розробляє проект „аналітичної машини”. У проекті машини пропонувалися такі пристрої:
- три зчитувача з перфокарт для введення програм і даних (пристрій введення даних);
- пристрій збереження інформації – пам’ять (за Беббіджем – „комора”) на п’ятдесят 40-розрядних чисел;
- два акумулятори для збереження проміжних результатів;
- пристрій для виконання операцій над числами, які беруться із „комори”, що називався „млин” або „фабрика”, цей пристрій тепер прийнято називати „центральним процесором”;
- для керування послідовністю операцій і їх виконанням слугував пристрій керування, який використовував перфокарти;
- пристрій виведення результатів шляхом видавлювання їх стальним штампом на мідній пластині. Звідси починають свій шлях різноманітні друкуючі пристрої.
Перевагою аналітичної машини було те, що вона могла обчислювати різні задачі. У проект закладено також і елементи програмування - зміст інструкцій передбачалося задавати шляхом позиціонування металевих штирів у циліндрі з отворами. У програмуванні машини передбачена концепція умовного переходу. За оцінками автора, сумування повинно було займати 3 сек., а множення і ділення – 2-4 хвилини.
Ідеї проекту вважаються найважливішим моментом „механічної” епохи. Вони випередили епоху Беббіджа майже на сто років. Очевидно, що в умовах XIX сторіччя, неможливо було виготовити тисячі шестерен з необхідною точністю та за відносно короткий проміжок часу відлагодити весь механізм. Але навіть і сьогодні більшість сучасних комп’ютерів за будовою подібні до аналітичної машини. Саме тому відлік історії комп’ютерів починають з проекту Беббіджа.
Наприкінці XIX сторіччя у зв'язку з розвитком науки та техніки потреба у лічильних машинах настільки виросла, що її перестали задовільняти не лише арифмометри, але й інші механічні лічильні пристрої. Оскільки до того часу достатньо добрий розвиток отримала теорія електрики, перспективним напрямком розвитку лічильних (обчислювальних) машин стало використання у них електричних, електромеханічних, а пізнішеше й електронних компонентів.
Розвиток науки і техніки, промисловості і суспільства висунуло проблему створення класу машин, які повинні допомогти людині орієнтуватися у потоці сигналів і відомостей, тобто у потоці інформації. Сьогодні ми розуміємо, що вміння людини накопичувати, зберігати, перетворювати і передавати інформацію є запорукою його успішної еволюції. Машини нового типу, призначені для здійснення процесів обробки, збереження і перетворення інформації – це комп’ютери, які ще називають інформаційними машинами.
В основу роботи комп’ютерів покладені певні закономірності та особливості, які є предметом вивчення курсу “Організація та функціонування комп’ютерів”.

1.2. Принципи організації комп’ютера фон-Неймана

Отже, згідно із фундаментальними принципами побудови універсального обчислювача, що були запропоновані ще на початку ХІХ сторіччя англійським вченим Ч. Беббіджем, він повинен складатись із 5-ти основних частин (рис.1.1): Основні ідеї побудови сучасних комп’ютерів у 1945 році сформулював американський математик Дж. фон Нейман. Тому. класичну структуру обчислювача Ч. Беббіджа також називають іменем фон-Неймана.
Призначення кожної з частин такі:
арифметико-логічний пристрій, у залежності від його внутрішньої будови, повинен виконувати математичні операції (додавання, віднімання, множення, ділення або й навіть складніші – добування квадратного кореня, піднесення до степеня та ін.), а також логічні та інші операції;
пам’ять інструкцій та даних (основна пам’ять) – саме інструкції (їх ще називають – командами), що розміщені у пам’яті і визначають, які операції, над якими даними, що теж розміщені у пам’яті, і у якій послідовності вони виконуються. Без пам’яті арифметико-логічний пристрій не виконає жодної дії і пам’ять без арифметико-логічного пристрою, теж нічого не виконає;

13 SHAPE \* MERGEFORMAT 1415

Рис.1.1. Загальна структура універсального обчислювача
пристрої вводу та виводу інформації забезпечують зв’язок обчислювача із людиною. За часів Беббіджа, а навіть у комп’ютерах першогого – третього поколіннь, інформація вводилась та виводилась за допомогою перфокарт – спеціальних картонних пластинок з отворами, кількість та порядок розташування яких кодували інформацію. Нагадаємо, що інформація, яку вводить людина у комп’ютер, може бути двох видів: дані, які необхідно обробляти, та інструкції (або – команди), які визначають послідовність та тип операцій обробки даних;
керуючий пристрій, відповідно, керує роботою усіх частин обчислювача. Для цього він повинен одна за одною зчитувати інструкції з пам’яті, “повідомляти” арифметичний пристрій про закладені у інструкціях операції та дані, а також змінювати свою роботу за вказівками людини.
Звичайно, що кожна складова частина сучасного комп’ютера стала сама по собі надзвичайно складною. Так, процесор здатний одночасно обробляти відразу декілька складних інструкцій, пам’ять поділяється на різні типи з різною ємністю та швидкодією (оперативна пам’ять, кеш-пам’ять, пам’ять на жорсткому диску та ін.), а пристрої вводу та виводу самі по собі можуть бути комп’ютерами із спеціалізованими функціями (сканери, принтери, цифрові фотокамери та ін.). Надзвичайно складною частиною комп’ютера стали також магістралі (або шини, інтерфейси) зв’язку між окремими компонентами комп’ютера, які на рисунку показані просто стрілками.
У цілому, функціонування любого комп’ютера можна звести до послідовності таких дій:
Комп’ютер за допомогою блоку вводу приймає інформацію у вигляді програм та даних і записує її до пам’яті;
Керуючий пристрій зчитує з пам’яті інструкції (команди) програми, розпізнає їх та визначає які дані і як повинні опрацьовуватися.
Дані, які зберігаються у пам’яті і підлягають опрацюванню згідно інструкції, під дією керуючого пристрою пересилаються до арифметико-логічного пристрою;
Результати опрацювання даних в арифметико-логічному пристрою записуються в пам’ять;
Дані, які отримані у результаті обробки інформації, направляються у пристрій виводу.
Тут слід зауважити, що за усі дії, що виконуються всередині машини, відповідає блок керування. Отже, діями комп’ютера керують інструкції (команди), з яких складається програма обчислення даної задачі.
Принципи, запропоновані Дж. фон Нейманом та закладені у концепцію побудови електронних комп’ютерів, отримали назву – принципи (парадигми) фон Неймана. Суть їх така:
Принцип програмного керування, який передбачає наявність попередньо створеної програми у вигляді послідовності (набору) інструкцій (команд).
Принцип однорідності пам’яті, який передбачає, що інструкції (команди) та дані зберігаються в одній і ті й самій пам’яті, в середині пам’яті вони не розрізняються між собою.
В основу цих принципів покладено такі положення:
інформація кодується у двійковій системі числення і розділяється на окремі частини – слова;
різнотипні слова інформації (команди, дані) відрізняються лише способом використання, а не способом кодування;
слова інформації розміщуються у комірках основної пам’яті та ідентифікуються номерами комірок (у двійковому коді), які називають адресами слів;
слова інструкцій (команд) визначають наймення операцій, що повинні виконатися над даними, та місце розташування даних у пам’яті;
виконання обчислень згідно алгоритму роботи зводиться до послідовного виконання команд у порядку, однозначно визначеному програмою.
Такий підхід був прийнятий у комп’ютерах, що створювалися у Принстонському університеті, через що і отримав назву “принстонської архітектури”.
Альтернативою фон-нейманівській архітектурі є так звана гарвардська архітектура. Вона передбачає наявність двох пристроїв пам’яті: один – для інструкцій програм, а другий –для даних. Причому програму не можна розмістити у вільній області пам’яті даних і навпаки. Гарвардська архітектура застосовується головним чином у керуючих комп’ютерах.
ІІ. Опис архітектури навчального комп’ютера DeComp

2.1. Організація навчального комп’ютера – симулятора DeComp

Симулятор навчального комп’ютера DeComp – це програма, яка імітує роботу комп’ютерів 1-го покоління і дозволяє досліднику не тільки виконувати усі команди та програми, але й “зазирнути” у внутрішню структуру комп’ютера і крок за кроком відслідкувати, як він працює. Дослідження комп’ютера 1-го покоління зручне тим, що його організація є максимально простою і містить мінімум елементів, необхідних для роботи комп’ютера взагалі. Сучасні комп’ютери набагато складніші, у них додано велику кількість додаткових елементів, призначених для підвищення продуктивності комп’ютера.
Програма-симулятор навчального комп’ютера DeComp, яку надалі будемо називати просто “симулятор”, знаходиться у лабораторних комп’ютерах на логічному диску D: у каталозі HOME\ki-1\OFK\DeCOMP або в каталозі, на який вкаже викладач. Якщо запустити на виконання файл DeComp.exe, тоді з’явиться вікно програми, зображене на рис.2.1.


Рис.2.1. Головна закладка вікна симулятора DeComp

У перший момент активованою є головна “закладка” вікна – “Навчальна ЕОМ”, окрім якої існують ще закладки “Карта пам’яті ЕОМ”, “Пристрій підготовки даних” та “Документація до “Навчальної ЕОМ”.
Закладка, що зображена на рис.2.1, фактично відображає зовнішній вигляд панелі управління реальних машин 1-го покоління. Як видно з цього рисунку, панель навчального комп’ютера складається з двох частин: структури комп’ютера та пульта управління.
Панель симулятора розділена на дві частини. У лівій частині панелі “Навчальна ЕОМ” подана структура навчального комп’ютера, на якій можна побачити усі 5 складових частин (блоків) обчислювача Ч. Беббіджа фон Неймана. Навчальний комп’ютер містить:
Пам’ять інструкцій та даних - Регістр адреси пам’яті і Регістр даних пам’яті;
Арифметично-логічний пристрій - Акумулятор і Регістр Ознак;
Присрій управління (Керуючий пристрій) – Регістр інструкцій і Лічильник Адреси інструкцій;
Пристрої вводу і виводу – на даний час робота над цією частиною симулятора ще не завершена. Заплановане використання пристроїв послідовного вводу/виводу.
Зауважимо, що у сучасних комп’ютерах арифметичний та керуючий пристрої об’єднані у одну складову частину – процесор (від англ. to process – обробляти), який не випадково називається головною частиною комп’ютера, що обробляє інформацію та керує роботою усього комп’ютера.
Пам’ять навчального комп’ютера складається з 4096 комірок і на панелі подана спеціальним вікном, яке відображає 8 комірок. Кожна комірка описується своє адресою (або номером) у лівій частині. За кожною адресою зберігається число у двійковому значенні, яке подається у правій частині вікна зображення пам’яті. На відміну від людини, яка користується системою числення з основою 10, у комп’ютері використовується лише 2 цифри – 0 та 1, тобто система числення з основою 2. Відповідно усі дані, а також інструкції всередині комп’ютера кодуються і зберігаються у двійковому вигляді.
Кожна комірка пам’яті здатна зберігати 16-розрядний код, який складається з 16 двійкових цифр, що називаються розрядами або бітами (8 біт = 1 байт). Таке 16-розрядне число називається словом. Максимальне число, яке здатна зберігати одна комірка, дорівнює 216  1 = 6553510. У свою чергу, оскільки максимальна кількість комірок становить 4096, то адреса кожної комірки складається з log24096 = 12 розрядів. Якщо у сучасних комп’ютерах шина адреси є 32-розрядною, то максимальна кількість комірок може становити 232
· 4млрд. = 4 ГБайти.
У симуляторі вікно пам’яті працює таким чином, що комірка, з якою у даний момент відбувається робота, знаходилась посередині вікна. Також біля вікна пам’яті зображено два регістри: Регістр Адреси пам’яті та Регістр Даних пам’яті. Це регістри, за допомогою яких здійснюється доступ до комірок пам’яті. Хоча вони зображені біля неї, насправді вони розташовані у процесорі.
Процесор, який складається з арифметичного та керуючого пристроїв, у симуляторі представлений „Арифметично-логічним пристроєм”, двома регістрами пристрою управління (Регістр Інструкцій та Лічильник Адреси Інструкції) та регістрами для доступу до пам’яті (рис. 2.1.).
Регістр – це комірка, що призначена для запам’ятовування інформації, розташована у процесорі і працює з набагато більшою швидкістю у порівнянні із комірками пам’яті. Як і комірка пам’яті, регістр складається з двійкових розрядів, які у регістрі мають спеціальну назву – тригер. Відповідно кожний тригер здатний запам’ятовувати одну двійкову цифру: 0 або 1. Кожний розряд (тригер) регістра у симуляторі представлений індикатором (кружечком), жовтий колір якого відповідає 1 (індикатор “світиться”), а сірий – 0.
Арифметично-логічний пристрій (АЛП) – це пристрій, який має два входи і один вихід і здатний виконувати набір арифметичних, логічних та інших операцій. На входи подаються дані у вигляді двійкових чисел, а на виході отримуємо результат виконання поточної операції над цими даними. У нашому симуляторі АЛП як такий не зображений, хоча обов’язково присутній. До складу АЛП у симуляторі також віднесено ще два регістри: Акумулятор, який відіграє одну з найголовніших ролей у роботі процесора, та Регістр Ознак.
Регістр Ознак складається з 3-х тригерів (розрядів) і відображає наступні ознаки результату операції АЛП:
Z (від англ. Zero - нуль) – ознака того, що результат операції дорівнює 0;
S (від англ. Sign – знак) – ознака того, що результат є < 0 (тобто - від’ємне число);
C (від англ. Carry – перенесення) – ознака того, що при виконанні арифметичної операції виникло переповнення розрядної сітки акумулятора і перенесення (тобто результат більший за 65535).
Коли індикатор відповідного тригера світиться, тобто значення його є “1”, це означає, що відбулася подія, яку відслідковує даний розряд регістра ознак.
На рис. 2.2 зображено схему підключення акумулятора. Вихід акумулятора підключений до одного з входів АЛП, а до другого входу підключений Регістр Даних пам’яті. Таким чином, АЛП здатний виконувати арифметичні та логічні операції над двома числами, одне з яких повинно знаходитись у акумуляторі, а друге – в Регістрі Даних пам’яті. В це регістр записуються числа з будь-якої комірки пам’яті. Деякі операції вимагають лише одного числа (наприклад, логічна операція НЕ, операція зсуву тощо) – у цьому випадку для збереження вхідного числа використовується акумулятор.


Рис.2.2. Схема підключення акумулятора

Вихід АЛП також підключається до акумулятора. Якщо результат операції записується в акумулятор, то він замінює (“затирає”) те число, що попередньо знаходилося в акумуляторі – це необхідно пам’ятати. Назва „акумулятор” (походить від англ. to accumulate – накопичувати) пояснюється тим, що більшість операцій в алгоритмі програми є взаємопов’язаними, тобто результат однієї операції використовується як вхідне число у наступній операції. В цьому випадку підключення акумулятора до входу та виходу АЛП (рис.2.2) є дуже зручним.
Крім того, таке підключення акумулятора до пам’яті дозволяє завантажувати до акумулятора вхідні дані з пам’яті, а також зберігати результати обчислень, записуючи їх назад до пам’яті.
Як вже зазначалось вище, доступ до пам’яті у процесорі здійснюється за допомогою двох регістрів: Регістра Даних пам’яті (надалі - Регістр Даних) та Регістра Адреси пам’яті (надалі - Регістр Адреси). Порядок дій дуже простий – перш ніж виконувати операцію доступу до пам’яті (запис або читання пам’яті), необхідно у Регістр Адреси записати адресу тієї комірки, до якої буде звертання. Якщо відбувається операція читання, тоді до Регістра Даних з пам’яті потрапляють дані (число або інструкція) із вказаної комірки. Якщо потрібно записати до пам’яті, то зрозуміло, що окрім адреси комірки у Регістр Адреси, необхідно попередньо до Регістра Даних занести число або двійковий код інструкції, які повинні записуватися до даної комірки пам’яті.
Згідно 2-го принципу організації комп’ютерів фон Неймана, у роботі любого комп’ютера є одна особливість: і дані і інструкції зберігаються у пам’яті у вигляді чисел, при чому без спеціальної інформації про те, де знаходяться дані, а де – інструкції, і їх абсолютно неможливо відрізнити. Яким же чином їх відрізняє процесор? Саме для цього і призначені два спеціальних керуючих регістри: Регістр Інструкцій та Лічильник Адреси Інструкцій. Лічильник Адреси Інструкції автоматично “відслідковує” адресу інструкції, яка в даний момент буде виконуватись у процесорі. А для того, щоб виконати цю інструкцію, вона зчитується з пам’яті до Регістра Інструкцій.

2.2. Пульт управління навчального комп’ютера

З правого боку панелі навчального комп’ютера розміщений пульт управління, що призначений для безпосереднього керування роботою навчального комп’ютера людиною. За допомогою пульта управління можна “вручну” занести інформацію (дані або інструкції) до регістрів процесора або пам’яті, а також виконувати операції запису та читання з пам’яті. Крім того, за допомогою пульта управління програміст “запускає” комп’ютер для виконання програми, яка знаходиться у пам’яті.
Головною частиною пульта управління є набірне поле з 16 перемикачів, які можуть знаходитись у 2-х станах: “натиснуто” і “не натиснуто” (відповідно “1” та “0”) Усі перемикачі пронумеровані від 0 до 15 справа наліво і відповідають розрядам 16-розрядного двійкового числа від наймолодшого розряду (0) до найстаршого (15). Для того, щоб встановити усі розряди набірного поля в 0, використовується спеціальна кнопка “Скидування набірного поля”.
Вище набірного поля знаходиться поле „Занесення з набірного поля” з 5-а кнопками, що дозволяють занести значення набірного поля у один з внутрішніх регістрів процесора:
РА – Регістр Адреси пам’яті,
РД – Регістр Даних пам’яті,
А – Aкумулятор,
РІ – Регістр Інструкцій,
ЛАІ – Лічильник Адреси Інструкції.
Оскільки регістри РА та ЛАІ пов’язані із адресами комірок пам’яті і є 12-розрядними, тому при занесенні значення набірного поля до них потрапляють тільки 12 молодших розрядів (від 0-го до 11-го).
Для роботи із комірками пам’яті використовується поле “Операція з пам’яттю” у верхній частині пульта управління. Як вже зазначалось вище, перш ніж виконувати операції запису або читання (кнопки “Запис” та “Читання”), необхідно у Регістр Адреси занести адресу потрібної комірки, а у випадку операції запису – також до Регістра Даних занести число, яке буде записуватись. Якщо операція доступу до пам’яті буде виконуватись із групою комірок, які розташовані підряд, то у цьому випадку зручно використовувати кнопку “+1”, яка автоматично збільшує значення Регістра Адреси на 1. Наприклад, це зручно, коли необхідно занести у пам’ять програму, або коли необхідно “онулити” (очистити) ряд комірок (занести число 0).
Тепер перейдемо до поля внизу пульта управління, де розміщені кнопки вибору одного з 3-х режимів роботи: кнопки початку "ПУСК" і зупинки роботи "СТОП" та кнопка включення живлення навчального комп’ютера. Використання кнопки „Живлення” пояснення не вимагає. Використання інших кнопок розглянемо детальніше.
Кнопка “Пуск” “примушує” процесор почати виконувати інструкції, які знаходяться у пам’яті, починаючи з комірки, на яку вказує Лічильник Адреси інструкцій. При цьому в залежності від обраного режиму роботи процесор буде виконувати програму таким чином:
у автоматичному режимі будуть виконуватись підряд усі інструкції до тих пір, доки не зустрінеться інструкція зупинки HLT (від англ. to halt – зупинятись), натиснута кнопка “Стоп” або не буде досягнуто кінця пам’яті.
Автоматичний – це стандартний режим роботи комп’ютера, коли уся програма, що розміщена у пам’яті, виконується від початку до кінця відзразу, без участі людини, яка бачить лише готові результати роботи програми. Зрозуміло, що у випадку помилки програміста, процесор може виконувати непередбачувані дії (наприклад, „тлумачити” дані як інструкції) або потрапляти у нескінчені цикли. Вони виникають тоді, коли один і той самий фрагмент програми повторюється знову і знову без оновлення даних. У таких випадках говорять про “зависання” або “зациклення” програми. У сучасних комп’ютерах така ситуація вимагає лише закриття такої програми, тоді як у перших комп’ютерах помилка призводила до “зависання” усього комп’ютера, що вимагало його перезавантаження. Для уникнення такої ситуації і для створення можливості відлагодження програми використовується поле “Зупинка за адресою”, що розміщене під полем роботи з пам’яттю. За допомогою 12-розрядної Адреси зупинки можна встановити адресу інструкції, на якій процесор буде зупиняти виконання програми. Для того, щоб точка зупинки почала працювати, її необхідно “Ввімкнути...”. Отже, автоматичний режим використовується для остаточного виконання програми.
у покроковому режимі виконується лише одна інструкція, на яку вказує Лічильник Адреси Інструкцій, після чого Лічильник Адреси Інструкції вкаже на наступну інструкцію і процесор зупиниться, чекаючи наступного натискання кнопки “Пуск”. Покроковий режим використовується для відлагодження алгоритму виконання програми і для дослідження сценарію виконання програми у процесорі навчального комп’ютера DeComp;
у потактовому режимі виконується лише один мікрокрок, з послідовності яких насправді складається виконання одніє інструкції. Потактовий режим роботи використовується для дослідження процесу виконання окремих інструкцій навчального комп’ютера.
Закладка “Документація до “Навчальної ЕОМ”

Відкриємо закладку “Документація до “Навчальної ЕОМ”, щоб ознайомитись з набором інструкцій процесора (рис.2.3). Для цього необхідно, у свою чергу, активізувати закладку “Набір інструкцій ЕОМ” внизу вікна симулятора.


Рис.2.3. Набір інструкцій процесора навчальної ЕОМ

Перш ніж ми почнемо більш детально розглядати інструкції навчального комп’ютера-симулятора DeComp, нагадаємо принципи його роботи, що безпосередньо витікають з парадигм фон Неймана:
Усі операції та обчислення здійснює процесор;
Яку саме операцію буде виконувати процесор, визначає інструкція, що розташована у Регістрі Інструкцій;
Послідовність дій процесора визначають інструкції, які розташовані у пам’яті;
Процесору достатньо знати лише адресу першої інструкції, решту він сам знайде за допомогою Лічильника Адреси Інструкцій;
Усі адреси інструкцій повинні розташовуватись строго одна після одної, крім інструкцій переходів, у яких адресу визначає програміст згідно алгоритму виконання програми. Саме це дозволяє процесору знаходити решту інструкцій автоматично.
У пам’яті окрім інструкцій за визначеними адресами повинні знаходитись дані (числа, інакше - операнди), які й будуть оброблятись процесором.
Адреси даних, які повинні оброблятись інструкціями, вказує поле адреси у інструкції;
Для виконання конкретної задачі у пам’ять записується відповідна програма, яка складається із множини інструкцій. Інструкції по черзі пересилаються з пам’яті у процесор, який їх виконує. У відповідності до розглянутих принципів процесор працює таким чином:
за вказаною адресою зчитує першу інструкцію;
виконує дії, вказані у цій інструкції;
збільшує вказану адресу на 1 і переходить до виконання наступної інструкції.
Як видно на рис. 2.3, таблиця “Набір інструкцій” складається з таких полів: Кодування, Мнемоніка, Виконання і Ознаки. Процесор навчальної ЕОМ містить 26 інструкцій.
Поле „Кодування” подане у вигляді 4-х чотирирозрядних груп (тетрад). Будь-яка інструкція описується її двійковим кодом, у якому старші розряди означають, власне, двійковий код інструкції. Буква “a” означає двійковий розряд 12-розрядної адреси комірки пам’яті, яку буде використовувати дана інструкція, а “x” – довільне двійкове значення.
Поле „Мнемоніка” містить символьне позначення, яке у більшості випадків є скороченням або абревіатурою англійських слів, що описують операцію даної команди.
Поле „Виконання” містить скорочений опис операції, яка буде виконуватись.
Поле „Ознаки” містить інформацію про вплив результатів виконання останньої інструкції на регістр ознак (“–” – не впливає, “*” – впливає згідно з результатом операції, “0” – встановлює в 0).
Усі інструкції можна розділити на адресні та безадресні. У адресних командах найстарші 4 розряди коду інструкції (старша тетрада) містять код, який визначає операцію (рис. 2.4), яку буде виконувати дана інструкція (наприклад, команда читання з пам’яті LOAD – 0000, команда додавання ADD – 0010) .

Код операції (КОп)
Поле адреси операнда або наступної інструкції

15 12 11 0

Рис.2.4.. Формат “адресних” інструкцій симулятора DeComp

Відповідно, у 12 молодших розрядах коду інструкції розташована адреса комірки пам’яті. За цією адресою комірки пам’яті може бути або один з операндів цієї операці (якщо це, наприклад, команда ADD), або наступна інструкція, що буде згодом виконуватись (наприклад, команда JMP).
У випадку безадресних команд (рис. 2.5) код інструкції може займати 6 або 7 старших розрядів, а решта молодших розрядів не використовується. Оскільки 25 = 32, то це означає, що 5 старших розрядів могло б вистачити для кодування усіх 26-ти інструкцій, але з метою об’єднання подібних інструкцій у групи з подібними кодами розробники симулятора використали більшу кількість розрядів для кодування безадресних інструкцій (фактично старших 4 розряди визначають код групи інструкцій).
Код операції (КОп.)
Поле з довільними двійковими кодами

15 9 8 0

Рис.2.5.. Формат “безадресних” інструкцій симулятора DeComp

2.5. Закладка “Пристрій підготовки даних”

Пристрій підготовки даних (ППД) “Навчальної ЕОМ” моделює роботу реального пристрою-перфоратора паперової стрічки ПЛ-150. ППД призначений для занесення на "перфострічку" коду програми чи вхідних даних для програми. Відповідно, пристрій має два режими роботи: "Підготовка коду програми" та "Підготовка вхідних даних програми".
Вибір режиму можна зробити клавішами, що розміщені справа внизу. Поруч розміщені клавіші “Підготовка нової стрічки” і “Корекція існуючої стрічки”, зміст використання яких зрозумілий із їх назв.
У ППД використовується шістнадцяткова, а не двійкова, клавіатура, тому що це пришвидшує ввід даних. Залежність між двійковими і шістнадцятковими кодами задається такою таблицею:
2 - 16
2-16
2-16
2-16

0000
0
0100
4
1000
8
1100
C

0001
1
0101
5
1001
9
1101
D

0010
2
0110
6
1010
A
1110
E

0011
3
0111
7
1011
B
1111
F


"Перфострічка", створена у першому режимі роботи, містить код програми і призначена для вводу в "Навчальну ЕОМ" за допомогою клавіші "Ввід з пристрою вводу" пульта управління ЕОМ. У цьому випадку вмістиме всієї "стрічки" заноситься у пам'ять ЕОМ.
Перед кожним 16-ти бітовим кодом на програмній "перфострічці"розміщується 12-бітова адреса. За цією адресою і буде заноситися у пам'ять код під час вводу програми.
Коди, які розміщуються у суміжних адресах програмної стрічки, будемо називати блоком. З метою спрощення процесу набору інформації на стрічку, адреса набирається лише на початку блоку і автоматично збільшується на одиницю після завершення виводу кожного коду. Кінець блоку вказують з допомогою клавіші "Завершення виводу блоку".
"Перфострічка", створена у другому режимі, містить дані, які вводяться з пристрою вводу і поміщаються в акумулятор ЕОМ за допомогою машинної інструкції INPUT під час виконання програми.
"Перфострічка" вхідних даних містить лише 16-бітні коди даних.

2.5.1. Порядок введення інформації на перфострічку

ППД готовий до роботи після включення живлення клавішею, що розміщена ліворуч внизу. Після вибору режиму роботи – “Підготовка нової стрічки” або “Корекція існуючої стрічки” – у лівому верхньому куті синім кольором висвічується запрошення до початку роботи і підказка про вид інформації, яку можна вводити.
Ліворуч від поля “Вмістиме стрічки” розміщена клавіатура введення інформації і клавіші керування:
“Стерти останній символ”;
“Вивести набраний код”;
“Завершити вивід блоку”;
“Вивести кінець стрічки”.
Вмістиме "перфострічки" висвічується як у двійковому, так і у шістнадцятковому кодах у вікнах поля “Вмістиме стрічки”, які є справа від клавіатури.
Код, який набирається на цифровій шістнадцятковій клавіатурі, висвічується у вікні індикатора, що є вище клавіатури. При набиранні код клавіші, яка була натиснена, попадає у молодший (останній зліва) розряд індикатора. Остання невірно набрана цифра може бути стерта за допомогою клавіші "Стерти останню цифру". Якщо буде набрано більше ніж чотири цифри, то старші цифри "пропадають". Після натискання на клавішу "Вивести набраний код", вмістиме індикатора переписується в тимчасовий буфер і висвічується у вікнах "Вмістиме стрічки" у двійковому і шіснадцятковому поданні.
Після вводу всіх кодів для запису вмістимого буферу на "перфострічку" необхідно натиснути на клавішу "Вивести кінець стрічки".
Набрана програма потрапляє у файл DeComp.prg і, як вже зазначалося, може бути уведена до оперативної пам’яті навчального комп’ютера.
III. ВКАЗІВКИ ДО ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ

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

Тема: “Ознайомлення з організацією навчального комп’ютера - симулятора DeComp”
Мета: 1. Вивчити організацію навчального комп’ютера – симулятора DeComp, призначення окремих блоків і можливості їх використання;
2. Засвоїти порядок уведення інформації в регістри та пам’ять симулятора навчального комп’ютера, навчитися вводити і запускати найпростішу програму.
3. Вивчити теоретичні основи побудови систем числення, які використовуються у комп’ютерах;
4. Засвоїти порядок використання двійкової системи числення.


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

1.1 Загальні поняття про системи числення

Система числення - це сукупність прийомів та правил для зображення чисел за допомогою цифрових символів (цифр), що мають визначені кількісні значення (числовий еквівалент).
У загальному випадку, в довільній системі числення, запис числа називається кодом і у скороченому вигляді може бути відображений таким чином:

A= anan-1...a2a1a0

Окрему позицію запису числа називають розрядом, а номер позиції n – номером розряду. Кількість розрядів запису числа називається розрядністю числа.
Якщо алфавіт має d різних значень, то розряд ai в запису числа розглядається як d-ічна цифра, яка може мати одне з d значень. Кожній цифрі ai однозначно відповідає її числовий еквівалент K(ai), а числовий еквівалент цілого числа A - це деяка функція числових еквівалентів цифр всіх розрядів.
Позиційна система числення - це така система, в якій значення символу (числовий еквівалент) залежить від його положення в записі числа.
Люба позиційна система числення характеризується основою.
Основа або базис d натуральної позиційної системи числення - це впорядкована послідовність кінцевого набору знаків або символів, які використовуються для зображення числа у данній систем, у якій значення кожного символу залежить від його позиції (розряду) у зображенні числа. Тому можлива нескінчена множина позиційних систем числення, через те, що за основу можна прийняти любе число (крім одиниці), створивши нову систему числення.
Однорідна позиційна система числення - це така позиційна система числення, в якій є одна основа d, а вага i-го розряду дорівнює p i.
Вага розряду p i числа у позиційній системі числення – це відношення

P i = d i / d 0 = d i
де i - номер розряду справа наліво, а d 0 це перший розряд ліворуч від коми і його номер дорівнює 0, а значення дорівнює 1.
Кожне число у позиційній системі числення з основою d може бути записане у вигляді дискретної суми степенів основи системи з відповідними коефіцієнтами, іншими словами, таку форму ще називають розгорнутою або повною:

13EMBED Equation.3141513EMBED Equation.31415 (1)

де: Ad – довільне число у системі числення з основою d;
13EMBED Equation.31415 – коефіцієнти ряду або цифри системи числення;
i = (n, n-1, n-2, , 1, 0, -1, , -m+1, -m) – номер розряду цілої (n) або дробової (-m) частини числа.
У сучасних комп’ютерних системах найбільше застосовуються позиційні системи числення. В універсальних цифрових комп’ютерах використовуються тільки позиційні системи числення, а у спеціалізованих комп’ютерах використовуються такі системи числення (в тому числі і не позиційні), які дозволяють значно спростити апаратуру процесора, зображення чисел і операції над ними для обчислення вузького класу задач.

Позиційні системи числення, які застосовуться у комп’ютерах

Для подання чисел в універсальних ЕОМ застосовували й застосовують двійкову, трійкову, вісімкову і шістнадцяткову системи числення, а для обробки економічної інформації – двійково-десяткову. Розглянемо основні з них.

1.2.1 Двійкова система числення

З точки зору технічної реалізації найліпшою є система з основою 2 або двійкова, тому що двохпозиційні елементи різної фізичної природи легко реалізуються. Крім того, у процесах з двома стійкими станами різниця між цими станами має якісний, а не кількісний характер, що забезпечує надійну реалізацію двійкових цифр. Таким чином, простота арифметичних і логічних дій, мінімум обладнання, що використовується для подання чисел та найбільш зручні умови реалізації визначили застосування двійкових систем числення практично в усіх відомих комп’ютерах і таких, що проектуються.
Двійкова система числення у комп’ютерах є основною, у якій здійснюються арифметичні і логічні перетворення інформації у пристроях комп’ютера. Вона має тільки дві цифри: 0 і 1, а всяке двійкове число зображається у вигляді комбінації нулів і одиниць. Кожний розряд числа у двійковій системі числення ліворуч від коми подається двійкою у відповідній додатний степені, а праворуч від коми – двійкою у від’ємній степені (табл. 1).

Таблиця 1
Номер розряду
4
3
2
1
0
-1
-2
-3
-4

Двійкова степінь
24
23
22
21
20
2-1
2-2
2-3
2-4

Десяткове значеня
16
8
4
2
1 (,)
0,5
0,25
0,125
0,0625


Наприклад, розгорнуту форму двійкового числа 11101,01 за формулою (1) можна записати так:

11101,012 = 1*24 + 1*23 + 1*22 + 0*21 + 1*20 + 0*2-1 + 1*2-2 =

= 16 + 8 + 4 + 1 = 29,2510

До недоліків двійкової системи числення можна віднести:
Значно більша, порівняно з іншими системами числення, кількість розрядів, які необхідні для подання однакових за абсолютною величиною чисел. Порівняйте:

2510 = 1758 = 5005 = 11111012

Необхідність переведення вхідних даних з десяткової системи до двійкової і вихідних – з двійкової до десяткової.

Вісімкова система числення

Вісімкова система числення має основу d = 8 i можливі значення розрядів
·i = 0, 1, 2, 3, 4, 5, 6, 7. Число вісім, яке дорівнює основі системи числення, записується двома цифрами у вигляді 10. Любе вісімкове число може бути зображено за допомогою формули розгорнутого запису (1) десятковим еквівалентом, наприклад:

726,158 = 7 * 82 + 2 * 81 + 6 * 80 + 1 * 8-1 + 5 * 8-2 = 470,20312510

Запис команд і даних програми у вісімковій системі числення у три рази коротше, ніж у двійковій.

Шістнадцяткова система числення

Шістнадцяткова система числення має основу d = 16 і
·i = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Для запису чисел у системі числення з основою, більше ніж 10, арабських цифр виявляється недостатньо і доводиться додатково вводити символи, що однозначно подають цифри від 10 до 15. У даній системі числення застосовують великі латинські (англійські) символи для позначення цифр від 10 до 15.
Будь-яке число з шістнадцяткової системи числення також може бути зображено десятковим числом за допомогою формули (1), наприклад:
10А,F16 = 1 * 162 + 0 * 161 + 10 * 160 + 15 * 16-1 = (26613 EMBED Equation.3 1415)16 .

У таблиці 2, для порівняння, наведені числа, що записані у різних позиційних системах числення.


Таблиця 2.
Система числення

Десяткова
Вісімкова
П’яткова
Шістнадцяткова
Двійкова

N10
N8
N 5
N16
N2

0
0
0
0
0000

1
1
1
1
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·

11110

70
106
240
46
1000110

100
144
400
64
11001000

2989
5655
43424
BAD
101110101101


Як видно із таблиці, число, що дорівнює основі системи числення, у любій системі числення кодується як 10.

1.3. Переведення чисел з однієї позиційної системи числення до іншої

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

1.3.1. Переведення цілих чисел

Правило переведення цілого числа з однієї системи числення до іншої. Число послідовно ділять на основу нової системи числення, записаної у початковій системі числення, до отримання частки, що дорівнює нулю. Число у новій системі числення записується як послідовність залишків від ділення, починаючи з останнього залишку.
Операцію ділення виконують у початковій системі числення, тому її зручно використовувати при переведенні десяткових чисел до інших систем числення.
Приклад 1. Перевести число 2510 у двійкову, вісімкову і шістнадцяткову системи числення.

а). 25 : 2 = 12 (залишок = 1) б). 25 : 8 = 3 (залишок 1) в). 25 : 16 = 1 (залишок 9)
12 : 2 = 6 (залишок = 0)
6 : 2 = 3 (залишок = 0) Напрямок запису Напрямок запису
3 : 2 = 1 (залишок = 1)
1 : 2 = 0 (залишок = 1)
Напрямок
Остання запису
частка
Результат переведення буде: 2510 = 110012 = 318 = 1916.

1.3.2. Переведення правильного дробу

Правило переведення правильного дробу з однієї системи числення до іншої. Правильний дріб послідовно множать на основу нової системи числення, записаної в початковій системі числення. У процесі множення приймають участь тільки дробові частини проміжних добутків, тобто їх ціла частина ігнорується, але не відкидається. Операцію множення виконують в початковій системі числення, тому це правило переважно використовують при переведенні десяткових дробів до інших систем числення. Правильний дріб у новій системі числення записується як послідовність цілих частин добутків, отриманих від множення, починаючи з першого.
Процес переведення закінчується, коли проміжний добуток дорівнює 0 у всіх розрядах або досягнута необхідна точність, тобто отримана необхідна кількість розрядів результату після коми.
Приклад 2.3. Десятковий дріб 0,312610 перевести у двійкову і вісімкову системи числення з точністю до 2-4.

0,3126 0,6252 0,2504 0,5008 0,3126 0,5008 0,2504 0,5008
* 2 * 2 * 2 * 2 * 8 * 8 * 8 * 8
0,6252 1,2504 0,5008 1,1,0016 2,5008 4,0064 0,0512 0,4096

Відповідно, результат буде записаний як: 0,312610 = 0,01012 = 0,24008 .

1.3.3. Особливості переведення вісімкових і шістнадцяткових чисел до двійкової системи числення і навпаки

Якщо розглянути таблицю 2 в частині вісімкових і двійкових чисел від 08 до 78, можна зауважити істинність таких двох положень:
а) всяке однорозрядне вісімкове число можна записати у вигляді трьохрозрядного двійкового;
б) всяке трьохрозрядне двійкове число можна записати у вигляді однорозрядного вісімкового.
Аналогічно, такий самий висновок можна зробити і для шістнадцяткових чисел від 016 до 1516, але у двійкових числах треба розглядати чотири розряди. Група з трьох двійкових розрядів називається тріада, а з чотирьох двійкових розрядів – тетрада. На підставі цих положень можна стверджувати:
Для переведення вісімкових чисел до двійкової системи числення необхідно кожну вісімкову цифру замінити еквівалентною їй двійковою тріадою (для шістнадцяткових чисел – тетрадою).
Для переведення двійкових чисел до вісімкової системи числення необхідно двійкове число розбити на тріади праворуч і ліворуч від коми (для шістнадцяткових чисел – на тетради). Якщо останні ліворуч і праворуч тріади (тетради) будуть неповні, їх потрібно доповнити нулями. Потім кожну двійкову тріаду (тетраду) замінити одною еквівалентною їй вісімковою (шістнадцятковою) цифрою (див. табл. 2.) .
Переведення чисел з десяткової системи числення до двійкової можна виконувати щляхом проміжного переведення до вісімкової системи числення, а потім отримане вісімкове число – у двійкове, тобто: A10 A8 A2.
Приклад 2.4. Десяткове число 572 перевести у двійкову систему числення.

572 : 8 = 71 (залишок = 4) Отримуємо: 57210 = 10748 = 001 000 111 1002 .
71 : 8 = 8 (залишок = 7)
8 : 8 = 1 (залишок = 0)
1 : 8 = 0 (залишок = 1)

1.3.4. Переведення чисел з любої позиційної системи числення до десяткової системи

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

1100101,12 = 1 * 26 + 1* 25 + 1* 22 + 1* 20 + 1* 2 -1 = 101,510 ;

3138 = 3 * 82 + 1* 81 + 3 * 80 = 20310 ;

1BF,516 = 1 * 162 + 11 * 161 + 15 * 160 + 5 * 16-1 = 447 + 5/16

2. Порядок виконання лабораторної роботи № 1.

1. Вивчити теоретичні відомості до лабораторної роботи № 1.
2. Дайте відповіді на такі контрольні питання:
1) Що називається системою числення?
2) Що таке основа системи числення?
3) Якою є вага окремого розряду числа у позиційній системі числення?
4) Які системи числення застосовуються у сучасних комп’ютерах?
5) Які особливості двійкової системи числення?
6) Які особливості вісімкової системи числення?
7) Які особливості шістнадцяткової системи числення?
8) Які є способи переведення чисел з однієї системи числення до іншої?
9) Правило переведення з однієї системи числення до іншої цілих чисел;
10) Правило переведення з однієї системи числення до іншої дробових чисел;
11) Правило переведення чисел з любої системи числення до десяткової системи;
12) Поясніть табличний метод переведення чисел з двійкової до вісімкової системи;
13) Поясніть табличний метод переведення чисел з двійкової до шістнадцяткової системи;
14) Поясніть табличний метод переведення чисел з вісімкової до двійкової системи;
15) Поясніть табличний метод переведення чисел з шістнадцяткової до двійкової системи;
У звіті кожний студент дає письмову відповідь на одне контрольне питання, номер якого співпадає з його номером за списком групи.
3. Запустити програму “Симулятор навчальної ЕОМ DeComp” (файл DeComp.exe) і включити живлення на панелі навчального комп’ютера.
За допомогою набірного поля і кнопок “Занесення з набірного поля”, записати до регістрів процесора такі значення двійкових кодів: до РА – 0101 0101 0101,
до РД – 0011 0011 0011 0011,
до А – 0000 1111 0000 1111,
до РІ – 0000 0000 1111 1111,
до ЛАІ – 1010 1010 1010.
Вміння виконувати вказані дії продемонструвати викладачу.
4. За допомогою набірного поля і кнопок “Операція з пам’яттю” записати до 5-ти сусідніх комірок пам’яті з адресами 20, 21, 22, 23 та 24 числа 16, 17, 18, 19 та 20. Попередньо всі десяткові числа перевести до двійкової системи числення і результати записати у робочий зошит для подання у звіті. Вміння виконувати вказані дії продемонструвати викладачу.
5. Записати у пам’ять описану нижче програму, яка додаватиме числа, що знаходяться у 10-й та 11-й комірках пам’яті, а результат запише до 12-ї комірки. Програму розмістити у оперативній пам’яті, починаючи з комірки за адресою 0 (нуль). Попередньо у 10-ту та 11-ту комірки занести числа відповідно до свого варіанту:

Таблиця варіантів до завдання

№ за списком
Число 1
Число 2
№ за списком
Число 1
Число 2
№ за списком
Число 1
Число 2

1
22
33
11
18
28
21
47
5

2
25
34
12
19
32
22
13
33

3
31
16
13
14
42
23
29
22

4
21
24
14
44
10
24
34
20

5
31
18
15
37
21
25
44
21

6
41
9
16
41
12
26
35
26

7
35
17
17
35
28
27
19
33

8
27
15
18
16
37
28
40
11

9
38
7
19
25
30
29
12
37

10
36
21
20
20
30
30
23
32



Відповідна програма у мнемонічних кодах буде мати такий вигляд:

Мнемонічний
код інструкції
Дія, яку виконує інструкція

LOAD 10
завантажити (прочитати) значення числа з 10-ї комірки пам’яті до
акумулятора;

ADD 11
додати до числа в акумуляторі значення числа з 11-ї комірки пам’яті і
результат зберегти в акумуляторі;

STORE 12
зберегти (записати) значення числа з акумулятора до 12-ї комірки пам’яті;

HALT
зупинити роботу процесора.


У двійковому поданні дана програма матиме наступний вигляд:

0000 0000 0000 1010 – двійковий код 1-ої інструкції
0010 0000 0000 1011 - - “ - 2-ої інструкції
0001 0000 0000 1100 - - “ - 3-ої інструкції
0111 1100 0000 0000 - - “ - 4-ої інструкції

Відповідно, двійковий код першої інструкції необхідно занести до комірки з адресою 0 (0000 0000 0000), другу – у комірку з адресою 1 (0000 0000 0001), третю – у комірку з адресою 2 (0000 0000 0010), а четверту – у комірку з адресою 3 (0000 0000 0011).
Після того, як програма розміщена у пам’яті навчального комп’ютера і у 10-ту (код адреси у двійковій формі - 0000 0000 1010) та у 11-ту (код адреси - 0000 0000 1011) комірки будуть занесені задані числа, необхідно у Лічильнику Адреси Інструкції за допомогою набірного поля встановити адресу першої інструкції, тобто код адреси - 0000 0000 0000, тобто показати процесору звідки починати виконання програми.
6. Виконати програму у автоматичному режимі і перевірити результат у 12-й комірці, прочитавши значення 12-ї комірки пам’яті.
7. Онулити 12-ту комірку, знову встановити у ЛАІ адресу першої інструкції – адресу 0 і дослідити цю програму, виконавши її у покроковому режимі. Після виконання кожної інструкції записати у подану нижче таблицю вміст усіх регістрів процесора.


РА
РД
А
РІ
ЛАІ
РО

1-й крок







2-й крок







. . .







N –й крок








Проаналізувати процес змін у регістрах процесора на кожному кроці виконання програми.
8. Оформити та захистити звіт з лабораторної роботи. Під час захисту звіту бути готовому дати усну відповідь на будь-яке контрольне питання і дати пояснення змінам у регістрах процесора, які відбуваються при виконанні кожного кроку програми.
Загальні вимоги до звітів з виконаних лабораторних робіт подані у додатку.
Лабораторна робота № 2

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

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

Звернімося до малюнку 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-ти розрядному процесорі:

13 EMBED Equation.3 1415 - результат – 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. Порядок виконання роботи

1. Ознайомитись з теоретичними відомостями до лабораторної роботи № 2.
2. Описати призначення прапорців Регістру Ознак;
3. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями.
4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа А і В для значень, коли А = В, А > В і А < В, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі № 1. Поясніть отримані результати.
5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
6. Оформити та захистити звіт з лабораторної роботи.

Вимоги до звіту

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


п/п
№ комірки пам’яті у двійковому коді
Код інструкції
(двійковий)
Мнемонічний запис інструкції
Коментар до кожної
інструкції


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

Тема: Дослідження інструкцій переходів і зсувів. Організація циклів.
Мета роботи: 1. Засвоїти використання основних інструкцій зсуву і переходів у системі
команд навчального комп'ютера DeComp.
2. Навчитись організовувати цикли необхідної стуктури і використовувати їх у програмах.

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

Інструкції, з якими ми будемо знайомитися у даній роботі складають дві групи:
1) інструкції керування виконанням програми:
інструкція зупинки (HALT);
інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);
інструкція безумовного переходу (JMP);
2) інструкції зсувів (вліво (Left) та вправо (Right)):
інструкції логічного зсуву (LSL та LSR);
інструкції арифметичного зсуву (ASL та ASR);
інструкції циклічного зсуву (ROL та ROR);
інструкції циклічного зсуву через перенос C (RCL та RCR).

1.1. Розглянемо інструкції переходів.

Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходів 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не та інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу.
Інструкція безумовного переходу JMP ADR має машинний код 1110 aaaa aaaa aaaa.

Відповідно, код операції дорівнює 1110, а решта розрядів – адресна частина. Мікропрограма виконання інструкції JMP має наступний вигляд:
ЛАІ ( РА;
РА ( РД;
РД ( РІ, декодування;
РІ ( ЛАІ – перехід на вказану адресу відбувається без будь-яких попередніх умов.
Як видно, інструкція безумовного переходу JMP просто записує до ЛАІ значення своєї адресної частини і програма буде змушена виконати інструкцію, що записана у комірці пам’яті за цією адресою. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal, Basic та ін.
Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: у залежності від виконання чи не викогаггя умови, зазначеної у алгоритмі програми, перехід або буде здійснюватись, або не буде. Контроль виконання умови здійснює Регістр Ознак шляхом встановлення чи не встановлення відповідного тригера. (див. методичні матеріали до лабораторної роботи № 2).

Якщо умова виконується, тоді наступною буде виконуватися інструкція, яка розміщена у комірці пам’яті, номер якої вказаний у адресній частині коду інструкції.
Якщо умова не виконується, тоді наступною буде виконуватися інструкція, яка знаходиться відразу в сусідній комірці пам’яті з коміркою інструкції переходу.

Фактично інструкції умовного п
·ереходу дозволяють реалізувати оператори розгалуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal
if (a < b) then
c:= a;
else
c:= b;
при реалізації його у навчальному комп’ютері DeComp (причому, змінна a знаходиться у 10-й комірці, змінна b – у 11-й, а змінна c – у 12-й) відповідатиме такий фрагмент програми у машинних кодах:

№ комірки пам’яті
Двійковий код інструкції
Мнемонічний запис
інструкції
Коментар

0000 0000 0000
0000 0000 0000 1010
LOAD 10;
завантажити до акумулятора змінну a

0000 0000 0001
0011 0000 0000 1011
SUB 11;
відняти від змінної a змінну b

0000 0000 0010
1100 0000 0000 0110
JNC 06;
якщо C = 0 (a>b), перейти до c:=b

0000 0000 0011
0000 0000 0000 1010
LOAD 10;
завантажити до акумулятора змінну a

0000 0000 0100
0001 0000 0000 1100
STORE 12;
записати змінну a на місце змінної c


0000 0000 0101
0111 1100 0000 0000
HALT;
зупинити програму

0000 0000 0110
0000 0000 0000 1011
LOAD 11;
завантажити до акумулятора змінну b

0000 0000 0111
0001 0000 0000 1100
STORE 12;
записати змінну b на місце змінної c

0000 0000 1000
0111 1100 0000 0000
HALT;
зупинити програму


Як видно з програми, оператор IF (a < b) реалізується за допомогою інструкцій віднімання SUB та умовного переходу за умови відсутності переносу C - JNC: якщо при відніманні від змінної a (розміщеної у акумуляторі) змінної b (розміщеної у 11-й комірці) не виникає переносу, це означає, що a > b, а значить, необхідно “перескочити” фрагмент, де виконується c:= a (блок інструкцій LOAD, STORE та HALT у 3-й, 4-й та 5-й комірках), і почати виконувати фрагмент c:= b (блок інструкцій LOAD, STORE та HALT у 6-й, 7-й та 8-й комірках).
Отже, у навчальному комп’ютері DeComp маємо такі інструкції умовних переходів (результат – число А знаходиться в акумуляторі):

Двійковий код
інструкції
Мнемонічний
запис інструкції
Значення ознаки, яка перевіряється
Значення
результату, що розміщений в акумуляторі

1000;
JNZ ADR
Z = 0
A ( 0

1001
JZ ADR
Z = 1
A = 0

1010
JP ADR
S = 0
A > 0

1011
JM ADR
S = 1
A <0

1100
JNC ADR
C = 0
A ( 216 - 1

1101
JC ADR
C = 1
A ( 216 - 1


При дослідженні інструкцій переходів у потактовому режимі видно, що їх хід відрізняється від розглянутого у прикладі, наведеному у лабораторній робті № 2. Для прикладу, мікропрограма інструкції JM матиме вигляд:



Мнемонічний
запис мікрооперації
Коментар

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

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

3
РД ( РІ;
декодування іперевірка регістру ознак РО

4
РІ ( ЛАІ
якщо S = 1, інакше 5)

5
ЛАІ + 1 ( ЛАІ
якщо S = 0



1.2. Організація програмних циклів

Для організації циклу засобами навчального комп’ютера DeComp в одній з комірок пам’яті необхідно розмістити лічильник циклів. Лічильник циклів це число, яке може мати значення N (якесь число) або 0 (const = N або const = 0). Відповідно, у циклі необхідно кожний раз лічильник зменшувати (або збільшувати) на 1 і за допомогою інструкції умовного переходу перевіряти, чи потрібно зробити цикл ще раз.
Наприклад, у комірці пам’яті за адресою 1010 розміщений лічильник - const = K = 15, у комірці пам’яті за адресою 1110 – константа = 1 (const = 1), яка буде обслуговувати цей лічильник. Тоді програма обслуговування циклу:

LOOP 1: . . . – мітка (адреса) попередньої частини програми;
LOAD 10 - вибрати значення з комірки 10 і розмістити його у акумуляторі;
SUB 11 - із значення, що є у акумуляторі, відняти 1;
JNZ LOOP 1 – перехід на LOOP 1, якщо у результаті виконання попередньої
операції ознака Z
· 0, тобто вміст акумулятора не дорівнює 0,
інакше – перехід на наступну aдресу – LOOP 2.
LOOP 2 . . . .

Це є лічильник "на 0", тобто процедура LOOP 1 виконується K = 15 разів і кожний раз виконується перевірка числа таких виконань шляхом зменшення значення у лічильнику (комірка пам’яті – 10). Коли у лічильнику значення стане рівним 0, програма почне виконувати процедуру LOOP 2.

1.3. Особливості виконання операцій зсуву

- LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку
переносу С).
- ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє
не зі старшого, тобто - знакового розряду, а з попереднього - старшого розряду
числа).
- ROL, ROR - циклічні зсуви ( розряди обертаються, не потрапляючи у ознаку переносу С).
- RCL, RCR - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С).

2. Порядок виконання роботи:

Вивчити теоретичні відомостями до лабораторної роботи № 3.
Дослідити у потактовому режимі інструкції ROL, RCL. JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак.
Скласти програму, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі, Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок.
Розробити алгоритм і cкласти програму в інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи. Програма виконується в автоматичному режимі.
Оформити та захистити звіт з лабораторної роботи.

3. Вимоги до звіту.

Крім основних вимог, що зазначені у додатку, у звіті програми повинні бути оформлені у такому вигляді:
- формулювання задачі;
- блок-схема алгоритма;
- інформація про вхідні дані і їх попереднє розташування у комірках пам’яті;
- призначення комірок, що використовуються;
- текст програми у наступному форматі:

Адреса комірки пам’яті
у десятковому коді
Код інструкції
(двійковий)
Мнемонічний формат
інструкції
Коментар до груп інструкцій,
що відповідають блокам
алгоритму програми


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

Тема: Дослідження інструкцій логічних операцій і виконання арифметичних операцій
навчального комп’ютера – симулятора DeComp.
Мета роботи: 1. Вивчити призначення логічних операцій.
2. Навчитись створювати і використовувати "фільтри" за допомогою
логічних операцій.
3. Вивчити правила кодування додатних і від’ємних двійкових чисел для
здійснення арифметичних операцій у комп’ютерах;
4. Навчитися кодувати двійкові числа із знаком у інструкціях навчального
комп’ютера – симулятора DeComp.

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

1.1. Загальні відомості про логічні функції

Усі дії, які виконуються у комп’ютері, повинні бути закодовані попередньо у програмі. За допомогою кожної команди програми кодується одна операція комп’ютера, яка виконується над парою операндів.
Арифметична операція – операція, у якій операнди і результат сприймаються як числа. До них відносяться операції додавання і віднімання, з якими ми познайомилися у попередніх роботах, а також операції множення і ділення. Усі інші операції, наприклад, добування кореня квадратного, піднесення до степеня, дифференцювання та ін., реалізуються у комп’ютері на основі вказаних операцій.
Логічна операція – операція, що полягає у логічній обробці операндів, які приймають у ній участь. До них відносяться операції порівняння, визначення модуля, визначення ознак результатів арифметичних операцій та ін. До них часом відносять операції зсуву праворуч або ліворуч.
Точна, певна послідовність операцій або програма, яка потрібна для виконання певної задачі на комп’ютері, формується на основі математичної теорії, відомої як алгебра логіки. Створив алгебру логіки англійський математик Дж. Буль (1815 – 1864). Тому її називають також алгеброю Буля. Алгебра логіки отримала значний розвиток завдяки роботам таких вчених як Е. Пост, К. Шеннон, В. Глушков, С. Яблонський та ін. Основним поняттям алгебри логіки є висловлювання.
Під час вивчення звичайної алгебри розглядають залежності типу А = f(x1, x2, xn), де x1, x2, xn – аргументи, а А – функція. Аргументи і функція при цьому можуть набувати найрізноманітніших числових значень: додатних і від’ємних, цілих і дробових. У алгебрі логіки вивчають залежності аналогічного вигляду А = f(x1, x2, xn), але такі, в яких аргументи і функція можуть набувати тільки двох значень: 1 і 0. Практичне використання таких функцій є формальним (математичним) описом логіки людського мислення в процесі виконання якоїсь задачі.
Вся діяльність людини так або інакше пов’язана з різними висловлюваннями. Будь-яке вимовлене твердження, зауваження є певним висловлюванням. У алгебрі логіки саме висловлювання є змінною (аргументом), яка може набувати одного з двох можливих значень (істина чи фальш, так чи ні, правдиво чи не правдиво) і над якою можна виконувати деякі дії. Подібно до аргументів у звичайній алгебрі, висловлювання позначають буквами якого-небудь алфавіту, наприклад, X, Y,Z або а, в, с. . .
За змістом висловлювання поділяють на прості і складні. Наприклад, прості: “вікно відчинене”, “у квартирі холодно”, “Микола вчиться в національному університеті “Львівська політехніка”, “Микола йде на стадіон”. З простих висловлювань за допомогою слів-зв’язок (сполучників) І, АБО, НЕ, ЯКЩО-ТО та ін. утворюють складні. Наприклад, речення: „Вікно відчинене і у квартирі холодно”, „Микола піде у парк або на стадіон”.
Будь-яке висловлювання може відповідати або не відповідати дійсності. У першому випадку його називають істинним (правдивим, true) і позначають як 1, а в інших – помилковим (хибним, false) і позначають як 0.
Особливістю виконання логічних операцій є порозрядність, тобто операції виконуються над кожною парою розрядів числа окремо і при цьому переповнення розрядної сітки не відбувається.
У обчислювальній техніці логічні операції використовуються надзвичайно широко.

1.2. Опис логічних інструкцій навчального комп’ютера

Група інструкцій, яку ми будемо досліджувати у даній роботі, присвячена логічним операціям: AND (логічне І), OR (логічне АБО), XOR (логічне Виключне-АБО) та NOT (логічне НЕ).
За винятком останньої логічної інструкції NOT, усі решта є адресними інструкціями, які виконують логічні операції над двома числами: значенням числа, що розміщене у акумуляторі та вмістом комірки пам’яті, на яку вказує 12-розрядна адреса у машинному коді інструкції, а також записують результат назад до акумулятора. Інструкція NOT є безадресною і вона заперечує (інвертує) усі розряди акумулятора із збереженням результату назад до акумулятора.
Перші 3 адресні інструкції мають такі 4-розрядні коди операцій:
AND – 0100,
OR – 0101 та
XOR – 0110.
Безадресна інструкція NOT має 6-розрядний код інструкції 0111 00.
Результати виконання логічних операцій зручно представити за допомогою такої таблиці:
Вхідні
набори
AND ( І )
*, &, (
OR (АБО)
+, |, (
XOR
Викл. АБО
(, #

Вхідні
набори
NOT (НЕ)
13 EMBED Equation.3 1415

A = 0
B = 0
0
0
0

A = 0
1

A = 0
B = 1
0
1
1

A = 1
0

A = 1
B = 0
0
1
1



A = 1
B = 1
1
1
0




У поданій таблиці перші дві колонки містять 4 можливих варіанти комбінацій двох 1-розрядних чисел: 00, 01, 10 та 11. Наступні 3 стовпці зображують відповідні значення результатів виконання логічних функцій (операцій) І, АБО та Виключне-АБО над вхідними наборами. Останні два стовпці містять 2 варіанти одного 1-розрядного числа: 0 і 1, та відповідні значення функції (операції) НЕ. Зверніть увагу на позначення, які використовуються для різних логічних операцій:
І – *, & чи (;
АБО – +, | чи (;
Виключне-АБО – ( чи #;
НЕ – ~ чи риска над значенням логічного аргумента , наприклад 13 EMBED Equation.3 1415 чи 13 EMBED Equation.3 1415.
Наприклад, 0 & 1 = 0; 1 ( 0 = 1; 1 ( 1 = 0 та ~1 = 0.
Логічну операцію І (*,&, () називають кон’юнкцією (від англ. – conjuction – з’єднання) або логічним множенням. Дійсно, результат операції І можна отримати, якщо перемножувати вхідні 1-розрядні числа: 0 * 1 = 0 або 1 * 1 = 1. Також назва кон’юнкія (з’єднання) йде від визначення результатів логічної операції І: результат дорівнює 1 тільки у випадку, коли всі аргументи дорівнюють 1.
Логічна операція І (&) дозволяє примусово встановити в "0" (обнулити) потрібні розряди даного числа:
10101010 & 11110000 = 10100000

Логічна операція АБО (+, |, () має назву диз’юнкція (від англ. – disjunction – роз’єднання) або логічне додавання. Диз’юнкція означає, що кожне з вхідних чисел незалежно виявляє своє значення: за визначенням результат логічної операції АБО дорівнює 1 лише тоді, коли хоча б одне (або всі) з вхідних аргументів дорівнюють 1. Правило логічного додавання тотожньо із арифметичним додаванням у 3-х випадках з 4-х: 1+1 ( 1, хоча 1 | 1 = 1.
Логічна операція АБО ( | ) дозволяє примусово встановити в "1" потрібні розряди даного числа:
10101010 | 11110000 = 11111010

Наведені приклади практичного використання операцій І та АБО називаються створенням "маски" або фільтра.
Логічну операцію Виключне-АБО ((, #) іноді ще називають сумою за модулем 2, або – додаванням за модулем 2. Дійсно, результат операції Виключне-АБО повністю співпадає з молодшим розрядом результату арифметичного додавання двох 1-розрядних чисел: 0 ( 1 = 1 (0 + 1 = 1), хоча 1 ( 1 = 0 (1 + 1 = 10). Виключність назви цієї логічної операції походить з її визначення: результат дорівнює 1, коли тільки одне з вхідних чисел дорівнює 1. При виконанні цієї операції над групою аргументів, результат дорівнює 1, якщо серед аргументів непарна кількість 1, якщо кількість 1 парна , то результат = 0.
Логічна операція НЕ є дуже проста: 13 EMBED Equation.3 1415 = 1, 13 EMBED Equation.3 1415 = 0, тобто - заміна вхідного значення на протилежне. Цю операцію ще називають запереченням або інвертуванням (від англ. inversion – перевертання).
Розглянуті 4 логічні операції вважаються найосновнішими і найбільш розповсюдженими, хоча насправді для двох 1-розрядних вхідних чисел існує 13 EMBED Equation.3 1415 різноманітних логічних функцій.
Ще раз відзначимо надзвичайно важливу відмінність логічних операцій у порівнянні з арифметичними – порозрядність, тобто якщо взяти два N-розрядних числа, то логічна операція над ними буде виконуватись над парами відповідних розрядів цих чисел незалежно одна від одної: логічна операція над парою нульових розрядів дасть нульовий розряд результату, логічна операція над парою перших розрядів дасть 1-й розряд результату і т. д. Саме тому логічні операції не впливають на ознаку переносу C, хоча можуть змінювати ознаку нуля результату Z та ознаку знаку результату S.

1.3. Подання від’ємних чисел у комп’ютерах

Для виконання операцій обробки інформації у комп’ютерах і системах збереження та передачі даних, її замінюють числами. Позначення різної інформації відповідними числами називають цифровим кодування, а послідовність цифр для позначення певної інформації - її кодом.
Кодуванню числової інформації у комп’ютерах приділяється особлива увага. Це викликано декількома причинами, одна з яких – наявність знаків у числах. Основна проблема полягає у тому, що центральним складовим елементом арифметично-логічного пристрою (АЛП) є суматор, який виконує лише порозрядне додавання двох кодів із врахуванням ваги кожного з розрядів та з організацією міжрозрядних переносів. Знак числа суматор не “розуміє”, його не розрізняє і сприймає знак числа як звичайний двійковий код.
На даний час прийнято, що мінус кодується як одиниця (1), а плюс – як нуль (0).
Для здійснення арифметичних операцій у комп’ютерах були розроблені спеціальні способи кодування і відповідні коди. Найбільш поширеними є прямий, обернений та доповняльний коди. Підкреслимо, що доповняльний та обернений коди використовуються тільки для подання від’ємних двійкових чисел. Додатні числа у цих кодах не міняють свого зображення і подаються як у прямому коді.

1.3.1. Прямий код

Він базується на природньому поданні чисел у вигляді їх абсолютного значення з кодом відповідного знаку: плюса (0) або мінуса (1) у старшому розряді.
Формула утворення прямого коду двійкового числа А = ± 0, а1а2а3аn має вигляд
13EMBED Equation.31415 (1.3.1)
Приклад 1.3.1. 1. А = + 0,1101; Апр = 0,1101.
2. А = - 0,10101; Апр = 1 - (-0,10101) = 1 + 0,10101 = 1,10101.

Таким чином, цифрові розряди числа у прямому коді залишаються незмінними, а у знаковій частині записується одиниця для від’ємного числа і нуль для додатного числа.

(У цьому прикладі після коду знаку поставлено умовно кому. Насправді, у комп’ютері „фізичної” коми не може бути. Надалі, для того, щоб чітко відрізняти знак від самого числа у прикладах, ми будемо всюди ставити умовну кому).

З (1.3.1) витікає, що нуль в прямому коді може бути додатним і від’ємним:
А= +0,00 00; Апр= 0,00 00.
А= -0,00 00; Апр= 1,00 00.

У комп'ютерах інформація зберігається у запам’ятовуючих пристроях (ЗУ), у пристроях вводу і виводу завжди у прямому коді.

1.3.2. Обернений код

Обернений код від’ємного числа називають доповненням до 1. Тут так само присутній знаковий розряд (0 – це “+”, 1 – це “-”).
Формула утворення оберненого коду має вигляд
Аоб = 13 EMBED Equation.3 141513 EMBED Equation.3 1415 (1.3.2)
Обернений код додатного числа повністю співпадає з відображенням числа у прямому коді.
Приклад 1.3.2. А = - 0,100110. Аоб = 10 + (– 0,100110) – 0,000001 = 1,011001.

Звідси витікає правило: щоб записати від’ємне число в оберненому коді, потрібно у знаковому розряді цього числа поставити одиницю, а в числових розрядах нулі замінити одиницями, а одиниці – нулями. Операція заміни нуля на одиницю і навпаки називається інвертуванням.
В оберненому коді нуль зображається неоднозначно, є два подання нуля: + 0 і – 0.

А = + 0,00 00; Аоб = 0,00 00;
А = - 0,00 00; Аоб = 1,11 11;

Така ситуація створює проблему, оскільки бажано мати систему, у якій існує тільки одне зображення любої цифри, у тому числі і нуля.

1.3.3. Доповняльний код

Для подання від’ємних чисел у двійковій системі числення частіше використовується система доповнення до двох. У ній також є знаковий розряд (0 це “ + ”, а 1 – це “-”). Доповнення виконується у два етапи. Спочатку кожна 1 міняється на 0, а кожний 0 – на 1 (інверсія). Потім до молодшого розряду отриманого результату додається 1. Наприклад, розглянемо перетворення вісьмирозрядного числа - 610 у форму з доповненням до двох:

000001102 = (+ 6)10
111110012 = (- 6 у системі з доповненням до 1)
111110102 = (- 6 у системі з доповненням до 2).
Формула утворення доповняльного коду двійкового числа має вигляд
Адоп = 13 EMBED Equation.3 1415 (1.3.3)
Приклад 1.3.3. А= - 0,101010; Адоп = 10 + (- 0,101010) = 1,010110.

Як видно з виразу (1.3.3), доповняльний код додатного числа повістю співпадає з зображенням числа у прямому коді.
Порівнюючи від’ємне число А з його доповняльним кодом Адоп, можна вивести наступне правило: щоб записати від’ємне число у доповняльному коді, потрібно у знаковому розряді цього числа поставити одиницю, а у всіх числових розрядах нулі замінити одиницями, а одиниці – нулями і до отриманого результату добавити одиницю до молодшого розряду.

Приклад 1.3.4. Записати двійкове число А = - 0,0101 у доповняльному коді.

А = - 0,010 = Адоп = 1,1010 + 0,0001 = 1,1011.

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

Приклад 1.3.5. Перетворити доповняльний код Адоп=1,1011 від’ємного числа у
прямий код.

Апр= 1,0100 + 0,0001= 1,0101.

У доповняльному коді від’ємний нуль відсутній. Тому доповняльний код використовується частіше, ніж обернений. Але у цій формі є інша особливість. Набір бітів, що складається з 1, за яким йдуть усі нулі (наприклад, 10, 100, 1000, . . .) є доповненням до самого себе.

1.3.4. Модифіковані коди

Ці коди відрізняються від простих машинних кодів тим, що на відображення знака відводиться два розряди: плюс відображається двома нулями (00), а мінус - двома одиницями (11). З погляду побудови АЛП вони зручні для виявлення переповнення розрядної сітки, яке може виникнути при додаванні чисел. Значення 01 та 10 у знакових розрядах свідчать про переповнення розрядної сітки. Невизначеність знаку приводить до того, що результат у цьому випадку буде не коректний, тобто, втрачається.
У модифікованих кодах другий розряд ліворуч від коми визначає знак числа, а перший розряд служить для аналізу переповнення розрядної сітки при виконанні арифметичних операцій над числами.
Перетворення двійкових чисел у модифіковані прямий, доповняльний і обернений коди проводиться за правилами, розглянутими вище.

Приклад 1.3.6. Подати двійкові числа А1= +0,1101101 і А2= - 0,1101101 у прямому,
доповняльному і оберненому модифікованих кодах.

13EMBED Equation.31415
Перетворення чисел у заданий код у комп'ютерах відбувається автоматично як при вводі чисел у комп’ютер, так і при виконанні операцій.

2. Порядок виконання роботи:

Вивчити і записати у звіт призначення логічних операцій AND, OR, NOT I XOR.
Ввести у симулятор та дослідити у покроковому режимі програму, яка буде виконувати логічні операції І, АБО, Виключне-АБО та НЕ над двома числами. Коди чисел вибрати згідно варіанту, що визначається у 1-й лабораторній роботі, використовуючи всі чотири тетради 16-ти розрядного формату. Наприклад, якщо задане число 1810 = 000100102 , воно записується у вигляді: 00010010 00010010. Виписати результати виконання програми та значення прапорців ознак.
Дослідити у потактовому режимі інструкції AND I XOR - для непарних номерів із журналу списку групи, OR та NOT - для парних номерів із списку групи. Виписати результати виконання програми.
Розробити алгоритм і написати програму, що для довільного числа "А", яке розміщене у комірці пам"яті з адресою "N", підраховує кількість пар "11" - для непарних номерів із списку групи, і кількість пар "00" - для парних номерів із списку групи.
Розробити алгоритм і написати програму, у якій для числа, яке використовується у пункті 4, виконується інвертування пар "11" - для парних номерів із списку групи і інвертування пар "00" - для непарних номерів із списку групи.
Розробити алгоритм і написати програму додавання двох від’ємних 16-ти розрядних чисел. Операція виконується у доповняльному коді.
Оформити та захистити звіт з лабораторної роботи.

3. Вимоги до звіту

Вимоги до звіту аналогічні вимогам до лабораторної роботи № 3.
Лабораторна робота № 5

Тема: Дослідження виконання арифметичних операцій з числами у форматі з фіксованою
комою у симуляторі DeComp.
Мета роботи:
Вивчити форми подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою;
Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичних операцій додавання та віднімання над двійковими числами з фіксованою комою у модифікованих кодах;
Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичної операції множення двійкових чисел без знаку.

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

1.1. Додавання і віднімання двійкових чисел з фіксованою комою

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

А - В = А + ( - В)

Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах.
Числа, що зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код.
При реалізації заміни віднімання додаванням, другий доданок у наведенному виразі переводиться у доповняльний код шляхом інвертування та додавання одиниці у молодший розряд. (Треба пам’ятати, що доповняльний код додатного числа співпадає з прямим кодом).

A –B = A +13 EMBED Equation.3 1415+1

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

1.2. Додавання двійкових чисел у модифікованому доповняльному коді

Доповняльні коди чисел додаються порозрядно. Причому знакові розряди додаються як звичайні розряди цілих чисел. Одиниця переносу, яка виникає при додаванні знакових розрядів, не враховується, тобто відкидається. Суму отримуємо у доповняльному коді. Для отримання остаточного результату цю суму необхідно обов’язково перевести у прямий код, тобто зробити друге доповнення.
Приклад 1. Додати у модифікованому доповняльному коді двійкові числа А і В при наступних умовах:
А > 0; B > 0; A + B > 0.
A = + 0,1101; B = + 0,0001 + 13 EMBED Equation.3 1415
13 EMBED Equation.3 141500,1110; 13 EMBED Equation.3 141500,1110;
2. А < 0; B < 0; A + B < 0.
A = - 0,1101; B = - 0,0001; + 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415 111,0010; 13 EMBED Equation.3 141511,1110;
Одиниця переносу із старшого знакового (
розряду не враховується

При переведенні у прямий код отриманих від’ємних результатів переводиться саме число і не переводиться знак (див. приклад 2), або число із спотвореним знаком береться за абсолютною величиною.

1.3. Додавання двійкових чисел у модифікованому оберненому коді

Реалізується так само, як і в доповняльному коді. Обернені коди чисел додаються порозрядно, знакові розряди додаються як розряди цілих чисел. Суму отримуємо у оберненому коді.
Відмінність полягає у тому, що одиницю переносу із старшого знакового розряду, якщо вона з’являється, потрібно додати до молодшого розряду суми, тобто виникає циклічний перенос.
Приклад 2. Додати у модифікованому оберненому коді числа А і В при умові:
1) А > 0; B < 0; A + B > 0.
A = + 0,1101; B = - 0,0001; + 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415100,1011
Циклічний перенос +1
13 EMBED Equation.3 1415; 13 EMBED Equation.3 141500,1100;

2) А < 0; B < 0; A + B < 0.
A = - 0,1101; B = - 0,0001; + 13 EMBED Equation.3 1415
13 EMBED Equation.3 1415111,0000;
Циклічний перенос +1
13 EMBED Equation.3 1415 13 EMBED Equation.3 141511,1110;

1.4. Переповнення розрядної сітки при додаванні у модифікованих машинних кодах

Переповнення розрядної сітки при додаванні модифікованих кодів, так само як і при додаванні у звичайних кодах із фіксованою комою, може бути лише у випадках, коли доданки мають однакові знаки. Таке переповнення виявляється способом порівняння знакових розрядів отриманої суми, наприклад, застосовуючи операцію додавання за модулем 2 (XOR). Ознакою переповнення є неспівпадання цифр, які створюються у двох знакових розрядах суми, тобто код знаку числа має вигляд 01 або 10. Відповідно, результат неможливо віднести до додатних, ні до від’ємних модифікованих кодів. Пояснимо це на наступних прикладах.

Приклад 3:

1. А = + 0,1101; 2. А = - 0,1101;
В = + 0,0111; В = - 0,0111;
А + В > 0; А + В < 0;
+13 EMBED Equation.3 1415 +13 EMBED Equation.3 1415
13 EMBED Equation.3 1415 13 EMBED Equation.3 1415
Відкидається (

Як видно з прикладів, у знакових розрядах отриманої суми додатних доданків маємо комбінацію „01”, а від’ємних – „10”, що свідчить про переповнення розрядної сітки.

1.5. Множення двійкових чисел без знаку

Множення двійкових чисел виконують за правилами, аналогічними для десяткових чисел, тобто визначають проміжні добутки, а потім їх додають. Але, важливо зазначити, що у цьому процесі значно полегшується процес визначення проміжних добутків. Насправді виконуються тільки два правила множення двійкового числа на двійкову цифру:
1). Якщо ця двійкова цифра (розряд множника) дорівнює 1, то двійкове множене просто копіюється без змін у якості проміжного добутку;
2). Якщо цей розряд множника дорівнює 0, то проміжний добуток дорівнює 0.
Ці правила ілюструє приклад 4. Дії виконуються наступним шляхом: у першому розряді множника стоїть 1, тому у якості першого проміжного добутку копіюється значення множеного. У наступному зліва розряді множника стоїть 0, і, відповідно, другий проміжний добуток дорівнює 0000. Далі, дії повторюються.
При визначенні кожного наступного проміжного добутку він зсувається вліво на один розряд відносно попереднього. Всі отримані проміжні добутки, враховуючи зсуви, додаються між собою. Таблиця ХХ – таблиця множення одного розряду двійкових чисел.

Табл. ХХ Приклад 4.

0 * 0
0

1 * 0
0

0 * 1
0

1 * 1
1

1 0 0 1 - множене
* 1 1 0 1 - множник
1 0 0 1
+ 0 0 0 0 проміжні
1 0 0 1 добутки
1 0 0 1 .
1 1 1 0 1 0 1 = добуток

Отже, операція множення двійкових чисел зводиться до операцій зсуву та додавання. Крім того зауважимо, що множення двох n – розрядних чисел 13 EMBED Equation.3 1415 дає результат, який містить 2n бітів.
Відомі два наступні основні способи виконання операції множення:
а) Множення, починаючи з молодших розрядів множника, із зсувом вліво, процес починається з молодшого розряду множника;
б) Множення, починаючи із старших розрядів множника, із зсувом вправо, процес починаючи із старших розрядів множника:

1101 - множене 1101 - множене
* 1101 - множник * 1101 - множник
1101 1101
+ 0000 + 1101
1101 0000
1101 1101
10101001 - добуток 10101001 - добуток
а) б)
Схема множення із зсувом СДП вправо подана на наступному малюнку.
13 EMBED Equation.3 141513 EMBED Equation.3 1415
На цьому малюнку позначено:
A(a3, a2, a1, a0) i B(b3, b2, b1, b0) – двійкові 4-ри розрядні числа – сомножники;
Р – добуток;
ДПі – проміжні добутки.
Зауважимо, що операція множення числа на 10 ± n - основу системи числення в степені ± n, рівноцінна зсуву даного числа вправо на n розрядів, якщо степінь додатна, і вліво, якщо степінь від’ємна.

Хоча процес аналізу розрядів множника і додавання множенного із самим собою стільки разів, скільки одиниць у множнику, простий, він вимагає достатньо великих витрат часу. Сумування проміжних добутків (ДП) виконується звичайно не на кінцевому етапі, а по мірі їх отримання. Це дозволяє не зберігати всі ДП, тобто скорочує апаратні витрати.
У залежності від способу отримання суми ДП (СДП) можливі чотири варіанти реалізації “традиційної” схеми множення:
1. Множення, починаючи з молодших розрядів множника, із зсувом СДП вправо і при множеному, що є нерухоме;
2. Множення, починаючи із старших розрядів множника, при зсуві СДП вліво і при множеному, що є нерухоме;
3. Множення, починаючи з молодших розрядів множника, із зсувом множеного вліво і СДП, що є нерухоме;
4. Множення, починаючи із старших розрядів множника, при зсуві множеного вправо і при СДП, що є нерухоме.
Варіанти із зсувом множеного (вар. 3, 4) на практиці використовуються менше, тому що для їх реалізації регістри множеного, СДП і суматор повинні мати розрядність 2n .
Виконання алгоритму множення без знаку із зсувом вправо для двох чисел: А = 1010 і В = 1110 показане на наступному прикладі:


Коментар

A
B
1010
* 1011
Множене
Множник

СДП
0000
початкове значення сумарного проміжного добутку

ДП0 = Ab0
P 0 = СДП + ДП0
P 0 13 EMBED Equation.3 14152-1
+ 1010
01010
01010
Множення множенного на 20 розряд множника (= 1);
Перший проміжний добуток
Зсув вправо першого добутку 13 SHAPE \* MERGEFORMAT 1415

ДП1 = Ab1
P 1 = P 0 13 EMBED Equation.3 14152-1+ ДП1
P 1 13 EMBED Equation.3 14152-1
+ 1010
011110
011110
Множення множенного на 21 розряд множника (= 1);
Другий проміжний добуток
Зсув вправо другого добутку 13 SHAPE \* MERGEFORMAT 1415

ДП2 = Ab2
P 2 = P 1 13 EMBED Equation.3 14152-1 + ДП2
P 2 13 EMBED Equation.3 14152-1
+ 0000
0011110
0011110
Множення множенного на 22 розряд множника (= 0);
Третій проміжний добуток
Зсув вправо третього добутку 13 SHAPE \* MERGEFORMAT 1415

ДП3 = Ab3
P 3 = P 2 13 EMBED Equation.3 14152-1 + ДП3
P 3 13 EMBED Equation.3 14152-1
+ 1010
01101110
01101110
Множення множенного на 23 розряд множника (= 1);
Четвертий проміжний добуток
Зсув вправо четвертого добутку, 13 SHAPE \* MERGEFORMAT 1415
отриманий кінцевий результат.


Даний алгоритм множення без знаку із зсувом вправо можна описати таким чином:
1. Первинне значення СДП приймається таким, що дорівнює 0;
2. Аналізується наступна цифра множника (аналіз починається з молодшого розряду). Якщо він дорівнює 1, то до СДП додається множене, інакше додавання не виконується;
3. Виконується зсув СДП вправо на один розряд;
4. Пункти 2 і 3 повторюються для усіх цифрових розрядів множника.

Аналогічним шляхом реалізуються і інші варіанти алгоритмів множення двійкових чисел без знаку.

2. Порядок роботи:

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


варіанту
Варіант
Хто виконує

1
Метод множення 1
1-ша підгрупа, непарні номери із списку

2
Метод множення 2
1-ша підгрупа, парні номери із списку

3
Метод множення 3
2-га підгрупа, непарні номери із списку

4
Метод множення 4
2-га підгрупа, парні номери із списку


Виконати дослідження програми, розробленої у пункті 4, у покроковому режимі.
Оформити і захистити звіт.


3. Вимоги до звіту

Вимоги до звіту аналогічні вимогам до лабораторної роботи № 3.

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

Тема: Дослідження виконання арифметичних операцій у форматі з рухомою комою.
Мета роботи:
Ознайомитися з поданням чисел у нормальній формі. Засвоїти порядок нормалізації чисел з рухомою комою. Ознайомитися з поняттям “характеристика” для чисел з рухомою комою.
Вивчити правила додавання (віднімання) двійкових чисел з рухомою комою.
Розробити алгоритми і програми додавання чисел в арифметиці з рухомою комою в інструкціях навчального комп'.ютера - симулятора DeComp.

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

1.1. Подання чисел з рухомою комою

У форматі з рухомою комою, який звичайно називають нормальною формою запису, числа записуються наступним чином:
A = ( М * d ( Р ,

де p – ціле число, яке називається порядком числа А;
d – основа системи числення;
М – мантиса числа А (звичайно |M| < 1).

При нормальній формі запис одного числа може приймати різний вигляд у залежності від обмежень, що накладаються на його форму. Фактично місце коми у мантисі М визначається величиною порядку р. Із зміною порядку р у більшу або меншу сторону кома відповідно переміщується ліворуч або праворуч, тобто рухається (“плаває”) у зображені мантиси. Наприклад:
23410 = 234 * 100 = 0,234 * 103 = 0,0234 * 104 = 2,34 * 102 ;

1011012 = 101101 * 100 = 0,101101 * 10110 = 0,00101101 * 101000 .

Можна зауважити, що хоча числа у наведених прикладах однакові за абсолютною величиною, проте мантиса потребує різної кількості розрядів. Для цього, щоб запобігти цьому, звичайно уводять деякі обмеження. Найбільш розповсюдженим і зручним для подання у комп’ютерах обмеженням є наступне:
d-1 ( M ( 1.

Числа, що записані у такій формі називаються нормалізованими. Іншими словами, у нормалізованих числах у мантисі першою цифрою перед комою стоїть 0, а перша цифра після коми – це цифра відмінна від нуля. Для двійкової системи числення вона дорівнює 1.
Таким чином, мантису розглядають як число менше одиниці, а порядок – як ціле число.
Операція нормалізації виконується шляхом зсуву мантиси вліво із зменшенням порядку, або вправо із збільшення порядку на величину, яка дорівнює кількості розрядів, на яку була зсунута мантиса.
Приклад: нормалізувати наступні числа:
0,00237 * 105 = 0,237 * 103 – мантиса зсувається на два розряди вліво, тобто – збільшується, а порядок зменшується на дві одиниці.
10101,0112 * 1010 = 0,10101011 * 10 111 - мантиса зсувається вправо на 5 розрядів, тобто – зменшується, а порядок збільшується на 5 одиниць.
Нормалізоване подання чисел дозволяє зберігати у розрядній сітці комп’ютера більшу кількість цифр, що мають значення, тому точність обчислень підвищується. Зазвичай у комп’ютерах нормалізація здійснюється автоматично як при вводі чисел, так і у процесі обчислень (після виконання чергової операції). При цьому мантиса зсувається ліворуч на необхідну кількість розрядів і виконується відповідне зменшення порядку, тобто виконується “нормалізація вліво”.
При виконанні операції додавання або віднімання нормалізованих чисел з різними порядками одно з них “денормалізується” до вирівнювання порядків, а сума (або різниця) знову нормалізується.
У розрядній сітці комп’ютерів фіксуються знак числа, знак порядку, порядок числа і числовий вираз мантиси.

0
1
2
...
...
...
...
...
...
m+n+1

(0
(0
(1
(2
...
(m
(1
(2
...
(n

Знак
мантиси
Знак
порядку

Порядок

Мантиса


У комп’ютерах із рухомою комою можливе переповнення розрядної сітки, так само, як і у комп’ютерах із фіксованою комою. Наприклад, переповнення може виникнути при додаванні нормалізованих чисел одного знаку з однаковими порядками. У цьому випадку з’являється “1” ліворуч від коми. Такого роду переповнення коригується зсувом мантиси вправо на один розряд і збільшенням порядку на одиницю, тобто виконується “нормалізація вправо”.

1.2. Правила додавання (віднімання) двійкових чисел з рухомою комою

Додавання і віднімання чисел з рухомою комою виконується у декілька етапів.
Вирівнювання порядків;
Як відомо, реальна величина (вага) Ni одиниці і-го розряду мантиси визначається не тільки позицією даного розряду, але й порядком р числа, тобто Ni = d p-і, де і – номер позиції, рахуючи вправо від коми.
При додаванні (відніманні) необхідно, щоб ваги однойменних розрядів мантис чисел були однаковими. Для цього мантиси зсувають одна щодо одної так, щоб їх порядки вирівнялися. Щоб при вирівнюванні порядків не отримати мантиси більшої за одиницю, їх потрібно вирівнювати від меншого до більшого порядку. Мантиса з меншим порядком зсувається вправо (у бік молодших розрядів) на кількість розрядів, що дорівнює різниці порядків і одночасно коректується порядок (збільшується до значення спільного порядку).
Додавання мантис;
Додавання мантис із вирівненими порядками виконується згідно правил додавання чисел з фіксованою комою. Зазвичай використовується модифікований доповнювальний код. (Пригадайте правила подання від’ємних чисел з використанням доповнювального або оберненого модифікованого коду).
3. Переведення результату додавання мантис у прямий код.
У результаті додавання мантис може виникнути один з трьох випадків:
а). Виникає переповнення розрядної сітки комп’ютера (порушення нормалізації вправо). Ознакою переповнення є невизначенність знакових розрядів, коли результат неможливо віднести ні до додатних, ні до від’ємних чисел (код 01 або 10). У цьому випадку необхідно виконати корекцію результату додавання мантис шляхом його зсуву вправо на один розряд і одночасного збільшення порядку на 1.
Наприклад, після додавання мантис отримуємо число 01,00001. Нормалізуємо його зсувом вправо на один розряд і одночасно збільшуємо порядок на 1. В результаті отримуємо:

(А + В)доп = 00,100001 * 10к+1

Переводимо у прямий код: (А + В)пр = 00,100001 * 10к+1.
Внаслідок корекції результату шляхом зсуву вліво точність його погіршилася.
б). Результат від’ємний. Переведення результату додавання мантис у прямий код віконується шляхом виконання другого доповнення (тобто, виконується інверсія результату і до отриманого коду додається 1 у молодший розряд) або другого обертання (тобто, виконується інверсія результату);
в). Результат додатний. У прямому коді додатний результат залишається без змін;
4. Нормалізація результату.
Виконується тоді, коли після переведення у прямий код у отриманому результаті відбувається порушення нормалізації вправо, тобто з правого боку від коми є один або декілька нулів. Це порушення коректується зсувом мантиси результату вліво і одночасне зменшення порядку на кількість розрядів зсуву мантиси до повної нормалізації мантиси.
Остаточний результат додавання двох чисел з рухомою комою: сума мантис – це мантиса результату, порядок результату – вирівняний порядок доданків, із врахуванням всіх проведених корекцій. .

Розглянемо приклади виконання операції додавання двійкових чисел з рухомою комою. Всі арифметичні дії будемо виконувати у модифікованому доповнювальному коді.

Приклад 1: Додати A = - 0,1101 * 10101 i B = + 0,1100 * 10011.

а) Вирівнюємо порядки.. Спочатку, визначаємо арифметичну різницю між порядками, віднімаючи від значення порядку числа А значення порядку числа В. При цьому операцію віднімання замінюємо операцією додавання у доповнювальному модифікованому коді.
рА – рВ = рА + (– рВ) = (pA доп(м) = 00,101) + (pB доп(м) = 11,101) = 00,010 – різниця порядків

Аналіз отриманої різниці:
знак різниці показує, що порядок числа А більше порядку числа В;
порядки відрізняються на дві одиниці.
Через те, що рА > pB, зсуваємо мантису числа В вправо на два розряди, тобто

МВ пр= 00,001100 і Впр= 00,001100 * 10101.

Розряди мантиси числа В, які вийшли за межі розрядної сітки процесора, будуть втрачені, що погіршить точність обчислень.
б) Переводимо мантиси обох чисел у модифікований доповнювальний код (в межах 4-х розрядів):
МА пр = 11,1101 ( МА доп(М) =.11,0011
МВ пр = 00,0011 ( МВ доп(М) =.00,0011

в) Додаємо модифіковані доповнювальні коди мантис чисел А та В і отримуємо результат у модифікованому доповнювальному коді:

(А + В)доп (М) = 11,0011 + 00,0011 = 11,0110

г) Аналіз результату додавання мантис починається із знакових розрядів. Знакові розряди показують, що переповнення розрядної сітки у нас не виникло. Результат – від'ємний, тому переводимо мантису результату у прямий код шляхом виконання другого доповнення і дописуємо спільний порядок:

(А + В)пр (М) = (11,1001 + 00,0001) * 10 101 = 11,1010 * 10101 - остаточний результат.

При переведенні у прямий код знак результату не міняється.
Подальший аналіз показує, що порушення нормалізації результату вправо немає.

Приклад 2. : Додати двійкові числа: А = + 0,10100 * 10101 та В = - 0,10110 * 10100 .

а) Для вирівнювання порядків доданків необхідно із порядку числа А відняти порядок числа В. Віднімання замінимо додаванням у модифікованому доповняльному коді.

(рА доп(м)= 00,101) + (рВ доп(м) = 11,100) = ,101 – 00,100 = 00,101 + (- 00,100) =

= 00,101 + (11,011 + 00,001) = 00,101 + 1,100 = 00,001

Через те, що рА > pB на +1, виконуємо зсув мантиси числа В вправо на 1 розряд.

МВ пр = 11,010110 і В = 11,010110 * 10101.

б) Переведемо мантиси доданків у модифікований доповняльний код.

МА пр = 00,10100 ( МА доп(М) = 00,10100.
МВ пр = 11,010110 ( МВ доп(М) = 11,101010.

в) Додаємо мантиси чисел А і В у модифікованих доповняльних кодах:

(МА доп(М) = 00,10100) + (МВ доп(М) = 11,10101) = 00,01001

г) Переводимо результат у прямий код (виконуємо друге доповнення). У нашому випадку прямий код суми мантис збігається з доповнювальним кодом суми мантис, тому що результат є число додатне.
(МА + МВ) пр(м) = 00,01001

Як видно, виникло порушення нормалізації вправо, тому що вправо від коми розряд дорівнює 0.
д) Виконуємо нормалізацію результату, тобто зсув мантиси ліворуч на 1 розряд з одночасним відповідним зменшенням порядку:

(А + В)пр = 0,1001 * 10100 – остаточний результат.



2. Порядок роботи:

Розробити алгоритм і написати програму додавання довільних (додатних і від’ємних) двійкових чисел із рухомою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp. Числа подаються у форматі:

Знак порядку
Знак мантиси
Порядок
Мантиса

2 розряди
2 розряди
4 розряди
8 розрядів


У алгоритмі передбачити аналіз отриманого результату на:
переповнення розрядної сітки (порушення нормалізації вліво);
наявність порушення нормалізації вправо;
від'ємний результат
Передбачити відповідні заходи з корекції результату.


3. Вимоги до звіту.

Вимоги до звіту аналогічні вимогам до лабораторної роботи № 3.
Лабораторна робота № 7

Тема: Дослідження виконання арифметичних операцій множення і ділення у форматі з фіксованою комою.
Мета роботи:
1. Вивчити алгоритми виконання арифметичних операцій множення та ділення у обчислювальних иашинах;
2. Розробити алгоритми і програми множення і ділення довільних двійкових чисел у форматі з фіксованою комою в інструкціях навчального комп’ютера DeComp.

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

1.1. Ділення двійкових чисел без знаку

Ділення двійкових чисел – найбільш трудомістка і тривала за часом операція, що виконується у АЛП більшості комп’ютерів загального призначення. Хоча на перший погляд ділення не складніше, ніж множення, проте виникає ряд проблем, пов’язаних з процесом ділення, що вимагають додаткових кроків з додатковими витратами часу.
Ділення вручну – це процес спроб та помилок. Наприклад, якщо потрібно розділити 461010 на 7710, ми спочатку помічаємо, що 77 не „входить” у 46, тому пробуємо розділити 461 на 77. Можна припустити, що число 461 у шість разів більше дільника 77, але перевірка показує помилковість такого припущення:
4610 | 77
- 462 | 6
-1
Тобто ми завищили значення частки і необхідно зменшити цифру першого розряду частки, яку пробуємо визначити, до значення 5. На більш простому прикладі покажемо повний формальний алгоритм дій, які ми виконуємо при діленні. Нехай нам потрібно поділити десяткові числа 5 на 2.

1-ша перевірка, чи ділене більше ніж дільник; різниця 5 | 2
додатна, тому продовжуємо: -2 | 2,5
2-га перевірка, чи ділене більше ніж дільник; бачимо: різниця 3
від’ємна, тому відновлюємо залишок і у частку записуємо значення -2
1-го розряду, яке дорівнює 2, тому що відбулося дві позитивні перевірки; -1
+ 2
Множимо залишок на 1010 – основу системи числення 10
і продовжуємо перевірки як і раніше, але у частці - 2
треба поставити кому. 8
Таких позитивних перевірок буде 5, доки різниця стане = 0, - 2
тому у частку запишемо число 5. 6
В універсальних комп’ютерах, як правило, реалізується цей “шкільний” алгоритм ділення чисел. Простий алгоритм ділення полягає у тому, що дільник на кожному кроці віднімається із діленого (починаючи із старших розрядів) стільки разів, скільки це можливо для отримання найменшого додатного залишку. Тоді у наступний розряд частки записується цифра, яка дорівнює числу дільників, що містяться у діленому на даному кроці. Інакше кажучі, при ділені операцію віднімання повторюють до тих пір, доки зменшуване не стане менше дільника, що віднімається. Число цих повторів показує, скільки разів число, що віднімається (дільник), вкладається у зменшуване (ділене).
Висновок: значення розряду частки – це кількість віднімань діленого до отримання від’ємного залишку, який відновлюється шляхом додавання до нього дільника.
Та сама проблема виникає, коли комп’ютер пробує розділити одне число на інше. Але для двійкової системи числення є відмінність – дільник або вкладається у ділене - тоді у частку записуємо 1, або не вкладається - тоді у частку записуємо 0 і потрібно розглядати додатковий розряд у діленому. Це значно полегшує процедуру ділення.
Розглянемо попередній приклад, але числа будуть подані у двійковій системі числення:

1 0 1 | 1 0
- 1 0 | 1 0 , 1
+ 0 1
- 1 0
- 1
+ 1 0
0 1 0
- 1 0
0
Зразу ж можна побачити, що дільник (10) вкладається у ділене, а тому записуємо 1 у старший розряд частки. Множимо дільник на 1 і віднімаємо з діленого.


Різниця = 0. Об’єднуємо 0 залишку із значенням наступного розряду дільника – це є 1 і продовжуємо перевірки.


Оскільки дільник (10) 0 разів вкладається у величину 01 (різниця від’ємна), записуємо 0 у наступний розряд частки і відновлюємо залишок, додаючи дільник.


До значення залишку 01 додаємо наступний розряд діленого


Через те, що цього розряду немає, додаємо до запису залишку 0 (отримаємо 010), а у частці ставимо кому, яка відділяє цілу частину частки від дробової. Остання перевірка дає 0 у залишку, тому процесс ділення припиняється.


На любому кроці ділення легко візуально визначити, чи дорівнює частка 1 або 0, але комп’ютер не володіє такою здатністю і повинен кожний раз виконувати пробне віднімання. Якщо після припущення про значення пробного розряду частки і віднімання дільника результат виявиться від’ємним, то поточне значення діленого повинно бути “відновлене”, або ж потрібно застосувати який-небудь інший метод ділення.
Окрім розглянутого, треба зауважити ще одну особливість виконання операції ділення у комп’ютері, незалежно від форми подання чисел і прийнятого алгоритму: перед початком операції необхідно виключити можливість ситуації ділення на 0. Інакше задача втрачає результат, тому що число “нескінченність” у арифметичних операціях використати не можливо. Більшість трансляторів ситуацію “Ділення на 0” вважають “фатальною помилкою” і видають відповідне повідомлення.
Зрозуміло, комп'ютер не може будувати припущень щодо того, скільки разів дільник укладається в тому або іншому числі, тому весь процес ділення зводиться до операцій віднімання і зміщення (зсуву).
Звичайно у комп’ютерах операція ділення реалізується двома способами:
з нерухомим діленим і дільником, що зсувається вправо;
з нерухомим дільником і діленим, що зсувається вліво;
Недоліком першого способу є потреба мати у пристрої ділення суматор і регістр подвійної довжини. Другий спосіб дозволяє будувати пристрій з суматором одинарної довжини. Нерухомий дільник зберігається у регістрі одинарної довжини, а ділене, що зсувається відносно дільника, знаходиться у двох таких самих регістрах. Цифри частки, що створюється, заносяться у розряди одного з регістрів діленого, які звільняються при його зсуві.
Розглянемо два основних алгоритми цілочисельного ділення

1.1.1. Ділення з відновленням залишку

Найбільш очевидний алгоритм носить назву алгоритму ділення з нерухомим дільником і відновленням залишку. Зовні він дуже подібний на загальноприйнятий спосіб ділення у стовпчик. Даний алгоритм може бути описаний таким чином:
1. Початкове значення часткового залишку (ЧЗ) приймається таким, що дорівнює
старшим розрядам діленого;
2. Частковий залишок подвоюється шляхом зсуву на один розряд вліво. При цьому
у його молодший розряд, що звільняється при зсуві, заноситься наступна цифра
частки;
3. Із зсунутого ЧЗ віднімається дільник і аналізується знак результату віднімання;
4. Наступна цифра модуля частки дорівнює 1, коли результат віднімання додатний, і
дорівнює 0, якщо він від’ємний. В останньому випадку значення залишку
відновлюється до того значення, яке було до віднімання.
5. Пункти 2 – 4 послідовно виконуються для отримання усіх цифр модуля частки.
Крім того, доцільно операцію віднімання при діленні чисел замінити додаванням дільника у доповняльному коді. Тоді значення переносу від додавання буде утворювати значення відповідного розряду частки.
Продемонструємо це на числах 20410 : 1210, 110011002 : 11002, але спочатку дільник (11002) подамо у доповняльному коді, що дозволить обмежитися додаванням у всіх випадках, коли потрібно виконувати додавання або віднімання: 1100пр = 1.0100доп. Частка формується у деякому регістрі С, незаповнені розряди якого позначатимемо через Х.
Починаємо віднімати дільник від діленого (фактично – додавати доповняльний код дільника). Якщо залишок виходить додатний, то у розряд частки записується 1, інакше - 0.
0. 11001100 ділене 20410
+ 1. 01000000 дільник 1210
10. 00001100 перший залишок
Оскільки залишок вийшов додатний і біт переносу = 1: С = 1ХХХХ. Далі зсувається перший залишок на один розряд вліво і від нього віднімається дільник:
0. 00011000
+ 1. 01000000
1. 01011000 другий залишок
Залишок від’ємний, біту переносу немає, тому у наступний розряд частки записується 0, С = 10ХХХ. Крім того, необхідно відновити залишок, тобто біти дільника повернути назад першому залишку, шляхом додавання дільника (у прямому коді) і другого залишку:
1. 01011000
+ 0. 11000000
0. 00011000 зміщений перший залишок.
Далі ще раз зміщується вже один раз зміщений перший залишок на один розряд вліво і віднімається від нього дільник:
0. 00110000
+ 1. 01000000
1. 01110000 третій залишок
Третій залишок від’ємний, значить наступний, третій розряд частки дорівнює 0, С = 100ХХ. Тому знову відновлюємо залишок - повертаємо дільник третьому залишку,
1. 01110000
+ 0. 11000000
0. 00110000 двічі зміщений перший залишок
Зміщуємо двічі зміщений перший залишок на один розряд вліво і віднімаємо дільник:
0. 01100000
+1. 01000000
1. 10100000 четвертий залишок
Четвертий залишок знову від’ємний, переносу немає, тому С = 1000Х. Додаємо дільник до четвертого залишку, результат зсуваємо на один розряд вліво, а потім знову віднімаємо дільник:
0. 1100000 перший залишок після четвертого зміщення
+ 1. 0100000
0. 0000000 п'ятий залишок
Залишок додатний, значить С = 10001 = 1710. Ділене вичерпалося - це і є відповідь.

Наведемо ще один приклад у іншій формі запису.
1 1 0 0 1 0 0 | 1 0 1 0
Доповнювальний код дільника + 0 1 1 0 | 1 0 1 0
Є перенос 1 0 0 1 0
0 1 0 1
Доповнювальний код дільника + 0 1 1 0
Переносу немає 0 1 0 1 1 (
+ 1 0 1 0 ( Повернення (відновлення) залишку
0 1 0 1 (
1 0 1 0
+ 0 1 1 0
1 0 0 0 0
0 0 0 0
+ 0 1 1 0
0 0 1 1 0

Наступна перевірка покаже, що процесс ділення у нас зійшовся до нуля.
Отже, операція ділення двійкових чисел при здійсненні його алгоритмом з відновленням залишку зводиться до операцій зсуву вліво залишку та частки і додавання. Також видно, що скільки буде отримано нульових значень розрядів частки, то стільки ж буде зроблено додаткових операцій відновлення залишків, на виконання яких витрачається зайвий час. У цьому полягає недолік розглянутого алгоритму.

1.1.2. Ділення без відновлення залишку

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

Початкове значення часткового залишку (ЧЗ) приймається таким, що дорівнює старшим розрядам діленого;
ЧЗ подвоюється шляхом зсуву на один розряд вліво. При цьому у молодший розряд ЧЗ, що звільняється при зсуві, заноситься чергова цифра частки;
Із зсунутого ЧЗ віднімається дільник, якщо залишок додатний, і до зсунутого ЧЗ додається дільник, якщо залишок від’ємний;
Наступна цифра модуля частки дорівнює 1, коли результат віднімання додатний, і нулю, якщо він від’ємний;
Пункти 2 – 4 послідовно виконуються для отримання усіх цифр модуля частки.
Як видно, пункти 1, 2, 5 повністю співпадають з відповідними пунктами попереднього алгоритму ділення. Наступний приклад із числами, що були використані у попередньому прикладі, проілюструє даний алгоритм.
1 1 0 0 1 0 0 | 1 0 1 0
Доповнювальний код дільника + 0 1 1 0 | 1 0 1 0
Є переніс 1 0 0 1 0
0 1 0 1
Доповнювальний код дільника + 0 1 1 0
Переносу немає 0 1 0 1 1
0 1 1 0
+ 1 0 1 0 - прямий код дільника
1 ( 0 0 0 0
0 0 0 0
+ 0 1 1 0 – доповнювальний код дільника
0 ( 0 1 1 0

1.2. Множення двійкових чисел із знаком

Алгоритми виконання операції множення двійкових чисел базуються на правилах множення однорозрядних чисел, а операція множення двох чисел зводиться до циклічного виконання сукупності операцій множення множеного на послідовність розрядів множника і відповідного зсуву множеного і множника.
Алгоритми виконання операції множення для різних форм подання чисел відрізняються незначно. Головні відмінності полягають у визначенні величини порядку добутку при множенні чисел з рухомою комою і місця коми при множенні чисел з фіксованою комою.
Від’ємними можуть бути як множене, так і множник. Як відомо, від’ємний знак подається одиницею, що сприймається комп’ютером як старший розряд числа. Тоді результат операції множення, коли множене або множник від’ємний, буде хибний і величина похибки залежить від того, яке з двох чисел є від'ємним.
При поданні від’ємних чисел у доповняльному або оберненому коді, множення виконується за правилами множення прямих кодів (при відповідному перетворенні кодів множників і добутку) або безпосередньо у цих кодах із врахуванням їх специфічних якостей.
Код знаку добутку визначається шляхом виконання операції додавання за модулем 2 згідно наступної таблиці.

Код знаку числа А
Код знаку числа В
Код знаку добутку

0
0
0 ( 0 = 0

1
1
1 ( 1 = 0

0
1
0 ( 1 = 1

1
0
1 ( 0 = 1


1.2.1 Множення чисел у форматі з фіксованою комою

Ця операція складає основу усіх методів множення любих чисел, поданих у інших форматах. При виконанні множення велике значення мають код подання чисел і, у деяких випадках, основа системи числення. Багато методів за алгоритмом виконання множення для різних систем числення інваріантні. Місце коми при множенні чисел з фіксованою комою не грає ролі і у результаті завжди наперед відомо. Будемо вважати, що співмножники представляють правильні дроби.
У разі множення дійсних чисел з фіксованою комою множене
A = 13 EMBED Equation.3 1415
і множник B = 13 EMBED Equation.3 1415
створюють добуток згідно з таким виразом
13 EMBED Equation.3 1415

де 13 EMBED Equation.3 14150, 1, . , d-1 – цифрові розряди;
13 EMBED Equation.3 1415 = 0, 1, - знакові розряди.
З урахуванням особливостей подання чисел у різних форматах кодування добуток у загальному випадку має вигляд

Z = A * B = ( a + a0)(b + b0) = ab +a0b +ab0 + a0b0 .

Залежно від коду подання чисел, результат має різні значення, які для створення правильного добутку необхідно коректувати або попередньо перетворювати співмножникі.
Множення чисел у доповнювальних кодах відрізняється від множення чисел без знаку тим, що власне знаковий розряд приймає участь в операції множення, а самі числа у процесі множення сприймаються як числа у прямих кодах.
Якщо n – розрядний множник В ( 0, то у доповнювальному коді він буде таким:

0 b1 b2 b3 . . . bn-1, де b1 b2 b3 bn-1 = | B |

Множення, починаючи з молодших розрядів, будь якого m – розрядного числа А на такий множник буде забезпечувати правильний результат.
Необхідно врахувати, що під час зсуву вправо від’ємного проміжного добутку у крайній зліва розряд числа (перший справа від коми) записується одиниця.
Розглянемо приклади множення додатного та від'ємного множенного (+А та –А) на додатний множник (+В) у доповнювальних кодах.
Приклад 1 А = + 9/1610; Aдоп = Апр = 0,10012
і В = + 5/1610; Вдоп = Впр = 0,01012
0,1 0 0 1
* 0,0 1 0 1


0,1 0 0 1
копія множеного (b-4 = 1);

0,0 1 0 0 1
зсув проміжного добутку (ДП);

0,0 0 1 0 0 1
зсув ДП (b-3 = 0);

+ 0,1 0 0 1
додавання копії множеного до двічі зсунутого ДП (b-2 = 1);

0,1 0 1 1 0 1
результат додавання;

0,0 1 0 1 1 0 1
зсув ДП;

0,0 0 1 0 1 1 0 1
( знак добутку
зсув ДП (b-1 = 0), отриманий результат у доповнювальному коді;


Результат: (А * В)пр = (А * В)доп = 0,001011012 = + 45/25610.
Приклад 2 А = - 9/1610; Апр = 0,10012; Aдоп = 13 EMBED Equation.3 1415 + 0,0001 = 1,01112;
В = +5/1610; Вдоп = Впр = 0,01012.
1,0 1 1 1
* 0,0 1 0 1


1,0 1 1 1
копія множеного (b-4 = 1);

1,1 0 1 1 1
зсув проміжного добутку (ДП), справа від коми дописана 1;

1,1 1 0 1 1 1
зсув ДП (b-3 = 0), справа від коми дописана 1;

+ 1,0 1 1 1
додавання копії множеного до двічі зсунутого ДП (b-2 = 1);

1,0 1 0 0 1 1
результат додавання;

1,1 0 1 0 0 1 1
зсув ДП, зліва від коми дописана 1;

1,1 1 0 1 0 0 1 1
( знак добутку
зсув ДП (b-1 = 0), справа від коми дописана 1. Отриманий результат у доповнювальному коді.


Результат: (А * В)пр = (13 EMBED Equation.3 1415)доп + 1 = 1,13 EMBED Equation.3 1415 + 0,00000001 = 1,001011012 = - 45/25610.
Якщо множник В < 0, то у доповняльному коді він буде таким: 113 EMBED Equation.3 1415,
де 13 EMBED Equation.3 141513 EMBED Equation.3 1415.
У цьому випадку – множення будь-якого числа А на від'ємний множник – результат буде більшим від правильного на величину А. Для отримання правильного значення добутку необхідно провести коригування, яке можна виконати на останьому кроці множення – при множенні на знаковий розряд множника, віднімаючи від проміжного добутку множене А.
Наступні приклади проілюструють процедуру множення додатного або від'ємного множеного на від'ємний множник.
Приклад 3 А = + 9/1610; Aдоп = Апр = 0,10012; (- A)доп = 13 EMBED Equation.3 1415 + 0,0001 = 1,01112;
В = - 5/1610; Впр = 0,01012 Вдоп = 13 EMBED Equation.3 1415 + 0,0001 = 1,10112
0,1 0 0 1
* 1,1 0 1 1


0,1 0 0 1
копія множеного (b-4 = 1);

0,0 1 0 0 1
зсув проміжного добутку (ДП);

+ 0,1 0 0 1
додавання другої копії множеного (b-3 = 1);

0,1 1 0 0 0 1 1
результат додавання;

0,0 1 1 0 1 1
зсув ДП;

0,0 0 1 1 0 1 1
зсув ДП (b-2 = 0);

+ 0,1 0 0 1
додавання третьої копії множеного (b-1 = 1);

0,1 1 0 0 0 1 1
результат додавання;

0,0 1 1 0 0 0 1 1
зсув ДП

+ 0,0 1 1 1
корекція результату шляхом віднімання (додавання у доповняльному коді від’ємного значення) множеного (- А)доп;

1,1 1 0 1 0 0 1 1
( знак добутку
Отриманий результат у доповнювальному коді;


Результат: (А * В)пр = (13 EMBED Equation.3 1415)доп + 1 = 1,13 EMBED Equation.3 1415 + 0,00000001 = 1,001011012 = - 45/25610.

Приклад 4 А = - 9/1610; Апр = 0,10012; Aдоп = 13 EMBED Equation.3 1415 + 0,0001 = 1,01112;
В = - 5/1610; Впр = 0,01012 Вдоп = 13 EMBED Equation.3 1415 + 0,0001 = 1,10112
1,0 1 1 1
* 1,1 0 1 1


1,0 1 1 1
копія множеного (b-4 = 1);

1,1 0 1 1 1
зсув проміжного добутку (ДП), справа від коми дописана 1;

+ 1,0 1 1 1
додавання другої копії множеного (b-3 = 1);

1,0 0 1 0 1
результат додавання;

1,1 0 0 1 0 1
зсув (ДП), справа від коми дописана 1;

1,1 1 1 0 0 1 0 1
зсув ДП (b-2 = 0);

+ 1,0 1 1 1
додавання третьої копії множеного (b-1 = 1);

1,0 0 1 1 1 0 1
результат додавання;

1,1 0 0 1 1 1 0 1
зсув (ДП), справа від коми дописана 1;

+ 0,1 0 0 1
корекція результату шляхом віднімання (додавання у доповнювальному коді від’ємного значення) множеного (фактично – у прямому коді через друге доповнення) (-(- А))доп;

1 0,0 0 1 0 1 1 0 1
( ( знак добутку
одиниця переповнення, що виникла при додаванні знакових розрядів, відкидається. Отриманий результат у доповнювальному коді;


Результат: (А * В)пр = (А * В)доп = 0,001011012 = + 45/25610
1.3. Ділення двійкових чисел у форматі з фіксованою комою.

Ділення чисел, представлених у форматі з фіксованою комою, можна також здійснити на двійкових суматорах оберненого і доповняльного коду.
Як і у випадку множення, ділення чисел із знаком може бути виконано шляхом переходу до абсолютних значень діленого і дільника, з наступним присвоєнням частці знаку „плюс” при співпадінні знаків діленого і дільника або “мінус” – у протилежному випадку.
Ділення чисел, поданих у доповняльному коді, можна здійснювати без переходу до модулів чисел. Розглянемо необхідні для цього зміни в алгоритмі без відновлення залишку. Через те, що ділене і дільник не обов’язково мають однакові знаки, то дії з частковим залишком (додавання або віднімання дільника) залежать від знаків залишку та дільника і визначаються згідно наступної таблиці:

Знак залишку
Знак дільника
Дії

+
+
Віднімання дільника

+
-
Додавання дільника

-
+
Додавання дільника

-
-
Віднімання дільника


Якщо знаки залишку і дільника однакові, то наступна цифра частки – 1, інакше – 0;
Якщо ділене додатне і дільник від’ємний, то частку необхідно збільшити на 1.
Якщо ділене від'ємне і дільник додатний, то при ненульовому залишку від ділення частку потрібно збільшити на 1.
Якщо ділене від'ємне і дільник від'ємний, то при нульовому залишку від ділення частку необхідно збільшити на 1.
Залишок завжди приводиться до додатного числа, тобто якщо по завершенні ділення він від’ємний, до нього потрібно додати модуль дільника (відновити залишок).

2. Порядок роботи

1. Розробити алгоритм і написати програму множення довільних, додатних і від’ємних, чисел, що подані у форматі з фіксованою комою у модифікованому доповнювальному коді в інструкціях симулятора DeComp;
2. . Розробити алгоритм і написати програму ділення довільних (додатних і від’ємних) чисел, що подані у форматі з фіксованою комою у модифікованому доповнювальному коді 2 в інструкціях симулятора DeComp;

3. Вимоги до звіту.

Вимоги до звіту аналогічні вимогам до лабораторної роботи № 3.
Література.

Дунець Р.Б., Кудрявцев О.Т. Арифметичні основи комп’ютерної техніки. - Львів: Ліга-Прес. - 2006. – 142 с.
Злобін Г. Г., Рикалюк Р. Є. Архітектура та апаратне забезпечення ПЕОМ: Навч. посіб. – К.: Каравела, 2006. – 304 с.
Кравчук С. О., Шонін В. О. Основи комп’ютерної техніки: Компоненти, системи, мережі: Навч. посібник. – К.: Каравела, 2006. – 344 с.
Цилькер Б. Я., Орлов С. А. Организация ЭВМ и систем. Учебник для вузов. – СПб.: Питер. 2006. – 668 с.
Хамахер К., Вранешич З., Заки С. Организация ЭВМ. 5-е изд. – СПб.: Питер; Киев: Издательская группа BHV, 2003. (Серия “Классика computer science”).
Бройдо В.Л., Ильина О.Л. Архитектура ЭВМ и систем. – СПб: Питер, 2006. – 718 с.
Жмакин А.П. Архитектура ЭВМ . – СПб: БХВ-Петербург, 2006. – 320 с.
Преснухин Л. Н., Нестеров П. В. Цифровые вычислительные машины. – М.: Высшая школа, 1981, 511 с.
Нешумова К. А. Электронные вычислительные машины и системы.: Учеб. для техникумов спец. ЭВТ, 2-е изд., доп. и перераб. – М Высш. шк. 1989. – 366 с.
Хеллерман Г., Гамахер В., Вранешич В., Заки С., и др. Компьютеры: Справочное руководство. В 3-х т. Пер. с англ./Под ред. Г. Хелмса – М.: Мир, 1986. – Т 1. 416 с.

Додаток

Вимоги до оформлення звітів з лабораторних робіт

Звіт про виконання лабораторної роботи оформляється на чистих аркушах формату А4 (210х297мм) з однієї сторони, як правило, у друкованому вигляді. До складу звіту повинні входити:
Титульна сторінка стандартного взірця (до кожного звіту), приклад якої наведено нижче.

13 SHAPE \* MERGEFORMAT 1415

Тема та мета лабораторної роботи;
Теоретичні відомості (обсягом, приблизно, від 1,5 до 3 сторінок). У теоретичних відомостях необхідно коротко вказати найголовнішу інформацію, що стосується теми лабораторної роботи, що отримана з методичних вказівок та пояснень викладача;
Завдання, що поставлені у методичних вказівках до лабораторної роботи у розділі «Порядок виконання роботи»;
Хід виконання роботи. Необхідно, у відповідності до завданя, точно і повно описати хід виконання кожного з пунктів. Потрібно описати спосіб або алгоритм виконання, подати всі блок-схеми, тексти програм і отримані результати досліджень.
Висновки (не більше 0,25 сторінки). У висновках необхідно коротко сформулювати основну ідею даної лабораторної роботи, висловити свої позитивні та негативні враження, а також, по можливості, запропонувати покращення (до програми симулятора, методичних вказівок, завдання, тощо).



З М І С Т

І. Теоретичні відомості
1

1.1 Коротка історія розвитку комп’ютерної техніки
1

1.2 Принципи організації комп’ютера фон-Неймана


ІІ. Опис архітектури навчального комп’ютера DeComp


2.1 Організація навчального комп’ютера – симулятора DeComp


2.2 Пульт управління навчального комп’ютера


2.3


2.4


2.5 Закладка “Пристрій підготовки даних”


2.5.1 Порядок введення інформації на перфострічку


III. ВКАЗІВКИ ДО ВИКОНАННЯ ЛАБОРАТОРНИХ РОБІТ


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


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


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


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


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


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


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


Література.
64

Додаток
65












13PAGE 15


13PAGE 146615





Арифметико-логічний





пристрій



Пам’ять

інструкцій та

даних



Керуючий

пристрій



Пристрі

й

вводу



інформації



Пристрі

й

в

и

воду



інформації





Міністерство освіти та науки України



Національний університет



Львівська політехніка







Кафедра ЕОМ











ЗВІТ



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



з дисципліни



Організація та функціонування

комп’ютерів





на тему:



Ознайомлення з симулятором навчальної ЕОМ



















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

-

11



Петренко І.М.



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



Іваненко С.В.









Ль

вів



2007







Root EntryEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native1Equation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation NativeEquation Native

Приложенные файлы

  • doc 19143787
    Размер файла: 1 MB Загрузок: 0

Добавить комментарий