Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра «ЕОМ»
Лабораторна робота №2
з предмету “Архітектура комп’ютерів”
на тему:
«Дослідження макроалгоритмів та мікроалгоритмів виконання машинних інструкцій»
Мета: зрозуміти і дослідити макроалгоритм та мікроалгоритм виконання кожної машинної інструкції машини Ноймана.
Завдання: покроковим режимом протестувати виконання кожної машинної інструкції, проаналізувати і пояснити отримані результати, потактовим режимом протестувати поокреме виконання кожної машинної інструкції, проаналізувати і пояснити отримані результати, скласти звіт з виконання лабораторних досліджень та захистити його.
Теоретичні відомості
В покроковому (інші назви: поінструкційний, покомандний режим) режимі виконання окремої машинної інструкції досліджують мікроалгоритм виконання цієї інструкції. Якщо прийняти до уваги, що в класі універсальних машин алгоритми програмують, програми завантажують до комп’ютерів і ними виконують, то зараз вийде наступне.
1. Програми складають з машинних інструкцій. Кожна інструкція має свій алгоритм виконання і цей алгоритм має точно уявляти системний програміст, що пише програму машинним кодом (як не дивно, але таке трапляється і трапляється не так зрідка). Алгоритми виконання кожної окремої машинної інструкції, що сприймає програміст, називають макроалгоритмами.
2. Для комп’ютерного інженера кожний макроалгоритм, особливий для кожної машинної інструкції, теж потрібно «запрограмувати», тобто, в певній формі записати «програму», що реалізує макроалгоритм виконання тої чи іншої машинної інструкції. Це подібно до програмування, але є іншим.
3. Кажимо, що програміст програмує задачу, а комп’ютерний інженер (мікропрограміст) мікропрограмує макроалгоритм виконання машинної інструкції. Виконання однієї такої мікропрограми є для програміста еквівалентним виконанню однієї машинної інструкції. Якщо програміст розуміє, як поокремі машинні інструкціями складають цілістну програму, то мікропрограміст цим не цікавиться. Задача мікропрограміста - надати в розпорядження програміста ефективний за певними критеріями набір машинних інструкцій (кажуть, множину машинних інструкцій).
Наприклад, множина з вісьми машинних інструкцій симулятора Кроха і його дуже обмежена пам’ять в 16 15-розрядних комірок дозволяє створити для нього компілятор мови Паскаль.
Отже, технології програмування комп’ютерів і їхнього проектування (створення мікрокодів для кожної машинної інструкції) є досить спорідненими.
4. Коли програми складені з машинних інструкцій (команд), тоді кожну машинну інструкцію складають з мікрокоманд, що всі разом утворюють мікропрограму виконання певної машинної інструкції команди).
Виконання роботи
Індивідуальне завдання:
№
Завдання
3
r =2(56+57+…+66)
Результат виконання:
Адреса
Машинний код
0000
0001
0010
0011
001 1101 1100 1101
001 1100 1011 1100
110 1110 1100 0000
101 1101 1010 1111
0100
0101
0110
0111
111 1111 1111 1111
000 0000 0000 0000
000 0000 0000 0000
000 0000 0000 0000
1000
1001
1010
1011
000 0000 0000 0000
000 0000 0000 0000
000 0000 0000 0010
000 0000 0000 0001
1100
1101
1110
1111
000 0000 0011 1001
000 0000 0011 1000
000 0000 0100 0011
rrr rrrr rrrr rrrr
Результат в режимі АВТО:
Записи в адресах:
адрес 1101 – 56(111000) – перше число;
адрес 1100 – 57(111001) – друге число;
адрес 1010 – 2(0010) – множник;
адрес 1011 – 1(0001) – крок, для дій з наступними числами (58, 59…).
адрес 1110 – 67(1000011) – межа чисел, які додаються.
адрес 1111 – r – результат виконання.
Робота програми в потактовому режимі:
/
Мал.1.1 Перша інструкція
Ця інструкція реалізує додавання двох чисел: перше число 5610(1110002), записане в комірці за адресою 13 (11012); друге число – наступний доданок число 5710(1110012), записане в комірці за адресою 12 (11002). Результат зберігаємо в комірку з адресу 13 (11012).
ТАКТ:
МК1: memory(0000) → IR.
МК2: PC+1→PC
МК3: memory (1101) → ACC
МК4: ACC + memory (1100) → ACC
MK5: ACC → memory (1101)
/
Мал. 1.2 Друга інструкція
У цій інструкції збільшуємо другий доданок на 1 (цикл буде повторюватись, доки буде виконуватись умова, вказана в програмі, тобто повторюватиметься 10 разів). Результат зберігаємо в комірці за адресою 12 (11002).
ТАКТ:
МК1: memory(0001) → IR
МК2: PC+1 → PC
МК3: memory (1101) → ACC
МК4: ACC + memory(1100) → ACC
MK5: ACC→memory (1100)
/
Мал. 1.3. Третя інструкція
Інструкція порівняння: Якщо доданок менший від границі (границя 66 відповідно до умови), то переходимо до команди за адресою 0 (00002).
ТАКТ:
МК1: memory (0100) → IR
МК2: PC+1 → PC
МК3: memory (1100) → ACC
МК4: ACC > memory (1110) → memory (1100)
Аналогічно третьому кроку, виконується робота з новими значеннями і так доти, поки доданок не буде рівний 66.
Такти команд після виходу з циклу:
Мал. 1.4. Четверта інструкція
Виконуємо множення результату, після виходу з циклу, який зберігається в комірці за адресою 13 (11012) на число 2(згідно з умовою, варіант №3), яке записане в комірці з адресою 10 (10102):
ТАКТ:
МК1: memory (0011) → IR
МК2: PC+1 → PC
МК3: memory (1101) → ACC
МК4: ACC * memory(1010) → ACC
MK5: ACC → memory (1111)
/
Мал. 1.5. П’ята інструкція
Виведення результатів виконання програми на екран у комірки з відповідними адресами, вихід із потактового режиму.
ТАКТ:
МК1: memory(0100) → IR
МК2: PC+1 → PC
МК3: memory (1100) → Вивід на екран 1-го числа
МК4: memory (1101) → Вивід на екран 2-го числа
MK5: memory (1111) → Вивід на екран 3-го числа
Покроковий режим:
/
Мал.2.1 Перший крок
Стан симулятора з інструкцією додавання. Отже, наказали додати до вмістимого комірки 13 (11012) вмістиме комірки 12, результат записати до комірки 12 (11002). Коректно обчислили (56+57) = 113.
/
Мал.2.2 Другий крок
Стан симулятора з інструкцією додавання. Отже, наказали додати до вмістимого комірки 12 (11002) вмістиме комірки 11 (10112), результат записати до комірки 12 (11002). Коректно обчислили (57+1) = 58. Це потрібно для того, щоб коректно працював цикл, який здійснює додавання чисел від 56 до 66 включно, отже, завдяки цій інструкції здійснюється перехід до наступного числа.
/
Мал.2.3 Третій крок
Стан симулятора з інструкцією порівняння. Коли вміст комірки з адресою 14 (11102) є більшим від вмісту комірки за адресою 12 (11002), тоді наступною виконуваною є інструкція з комірки з адресою 0 (00002). Якщо вміст комірки за адресою 14 (11102) буде меншим від вмісту комірки за адресою 12 (11002), тоді відбувається вихід з циклу і виконується наступний крок.
/
Мал.2.4 Четвертий крок
Стан симулятора з інструкцією множення. Вмістиме комірки за адресою 13 (11012) множимо на вмістиме комірки за адресою 10 (10102), результат записуємо в комірку за адресою 15 (11112).
/
Мал.2.5 П’ятий крок
Завершення роботи програми, виведення результату в комірку за адресою 15 (11112) і вихід з покрокового режиму.
Висновок: після виконання даної лабораторної роботи я зрозуміла і дослідила макроалгоритм та мікроалгоритм виконання кожної машинної інструкції машини Ноймана.