МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
Кафедра ЗІ
/
Звіт
до лабораторної роботи №1
з курсу: «Архітектура комп’ютерних систем»
на тему: «Практика роботи з архітектурним симулятором WINMIPS64»
Мета роботи
Опанування технікою роботи з архітектурним симулятором WinMIPS64 машини з 64-розрядною RISC архітектурою MIPS64.
Завдання
Виконати пункти 2 та 3 згідно варіанту поданого нижче. Для операції віднімання використати інструкцію dsub.
Варіант
Число А
Число В
Арифметична
операція
24
31
2
-
Початок виконання роботи
.data
A: .word 31
B: .word 2
C: .word 0
.text
main:
ld r4,A(r0)
ld r5,B(r0)
dsub r3,r4,r5
sd r3,C(r0)
halt
Код програми мовою асемблера
Секція .data містить дані, над якими програма виконує операцію. В даному випадку маємо три змінні зі значеннями 31, 2 та 0.
Секція main містить власне виконуваний код:
Інструкція LD rt, offset(base) завантажує подвійне машинне слово з пам’яті в вказаний регістр rt значення з пам’яті зі зсувом offset.
Інструкція DSUB rd, rs, rt виконує віднімання значень регістрів rs та rt зі збереженням результату в регістр rd.
Інструкція SD rt, offset(base) виконує протилежну до LD функцію, тобто зберігає значення регістру в комірку пам’яті зі зсувом offset.
Інструкція HALT переводить процесор в стан HALT.
Pass 1 completed with 0 errors
00000000 .data
00000000 000000000000001f A: .word 31
00000008 0000000000000002 B: .word 2
00000010 0000000000000000 C: .word 0
00000000 .text
00000000 main:
00000000 dc040000 ld r4,A(r0)
00000004 dc050008 ld r5,B(r0)
00000008 0085182e dsub r3,r4,r5
0000000c fc030010 sd r3,C(r0)
00000010 04000000 halt
Pass 2 completed with 0 errors
Code Symbol Table
main = 00000000
Data Symbol Table
A = 00000000
B = 00000008
C = 00000010
Результат перевірки
Бачимо, що програма пройшла процес перевірки без помилок.
Відкриваємо симулятор WinMIPS64 та завантажуємо в нього написану програму.
Починаємо потактове виконання:
Такт 0
/
Інструкція за адресою 0000 знаходиться на етапі зчитування.
Такт 1
/
Інструкція за адресою 0000 знаходиться на етапі декодування, а інструкція за адресою 0004 тільки на етапі зчитування.
Такт 2
/
Інструкції продовжують рухатися в конвеєрі, інструкція за адресою 0000 перейшла у виконання. Цей процес є послідовним.
Такт 3
/
Інструкція за адресою 0000 на цьому етапі взаємодіє з основною пам’яттю, а саме виконує зчитування комірки зі зсувом 0000, але запис в регістр R4 відбудеться на наступному такті.
Такт 4
/
Бачимо, що значення регістру R4 змінилося з 0х00 на 0x1f (31). Друга інструкція LD за адресою 0004 здійснила взаємодію з основною пам’яттю та змінить регістр R5 на наступному такті.
Такт 5
/
Регістр R5 змінив значення з 0x00 на 0х02 (2), а інструкція DSUB за адресою 0008 перейшла на етап виконання та зупинилася в RAW Stall.
Такт 6
/
Регістр R3 містить результат роботи інструкції за адресою 0008.Такт 7
/
Інструкція LD за адресою 000с отримає доступ до регістру R3 та на наступному такті перенесе значення в комірку пам’яті зі зсувом 0010.
Такт 8 /
Інструкція за адресою 000c виконала звертання до пам’яті та на наступному такті покине конвеєр, в результаті виконання цієї інструкції комірка пам’яті зі зсувом 0010 змінила значення з 0х00 на 0х1d (29), що відповідає передбачуваному результату (31-2=29).
Такт 9
/
Виконання інструкції HALT за адресою 0010, виконання програми завершено, процесор переведено в режим HALT.
Такт 10
/
Конвеєр очищено.
Загалом, на виконання програми було використано 10 тактів, програма складалася з 5 операцій та чотирьох інструкцій. Оскільки програма виконувалася з увімкненим випередженням, тобто такти могли виконуватися без затримок, присутніх в реальному процесорі, то час виконання скоротився.
З вимкненим випередженням програма виконується за 13 тактів, а діаграма тактів виглядає наступним чином:
/
Висновок
На цій лабораторній роботі я ознайомився з середовищем симулятора процесора з RISC-набором інструкцій архітектури MIPS64, створив та покроково виконав програму, яка виконує віднімання двох чисел, описав кожен процес та стан конвеєра в такті.