Курсовая работа: Проектування комп`ютера

біти 24-22: код операції

біти 21-0: не використовуються (=0)

unused

\

Роз'яснення та аналіз основних принципів побудови комп'ютерів на прикладі визначених на реалізацію інструкцій

Структура СК після модифікації:

Рис 1. Функціональна схема СК після модифікації

В СК було додано 13 інструкцій, внаслідок чого поле КОП збільшилося на 2 біти до 5 біт (максимально 32 інструкції з яких використано 21). Решта частина коду операції не зазнала зміни. Був доданий стек глибиною 32 слова по 32 біти, покажчик вершини стеку, прапорець стану ZF.

Перевірка правильності роботи реалізованих команд у прикладах

1. div: 45/5=9.


Програма:

lw 0 1 num1

lw 0 2 num2

div 1 2 3

done halt

num1 .fill 45

num2 .fill 5

Машинний код:

8454148

8519685

34209795

25165824

45

5


Кінцевий стан:

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 34209795

mem[ 3 ] 25165824

mem[ 4 ] 45

mem[ 5 ] 5

registers:

reg[ 0 ] 0

reg[ 1 ] 45

reg[ 2 ] 5

reg[ 3 ] 9

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

2. imul: 3*(-4)=-12.


Програма:

lw 0 1 num1

lw 0 2 num2

imul 1 2 3

done halt

num1 .fill 3

num2 .fill -4

Машинний код:

8454148

8519685

34209795

25165824

3

-4


Кінцевий стан:

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 38404099

mem[ 3 ] 25165824

mem[ 4 ] 3

mem[ 5 ] -4

registers:

reg[ 0 ] 0

reg[ 1 ] 3

reg[ 2 ] -4

reg[ 3 ] -12

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

3. xidiv: 30/(-5)=-6, обміняти операнди місцями.


Програма:

lw 0 1 num1

lw 0 2 num2

xidiv 1 2 3

done halt

num1 .fill 30

num2 .fill -5

Машинний код:

8454148

8519685

42598403

25165824

30

-5


Кінцевий стан:

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 42598403

mem[ 3 ] 25165824

mem[ 4 ] 30

mem[ 5 ] -5

registers:

reg[ 0 ] 0

reg[ 1 ] -5

reg[ 2 ] 30

reg[ 3 ] -6

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

4.and: 5&3=1

0101

&

0011

0001


Програма:

lw 0 1 num1

lw 0 2 num2

andf 1 2 3

done halt

num1 .fill 5

num2 .fill 3

Машинний код:

8454148

8519685

46792707

25165824

5

3


Кінцевий стан:

@@@

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 46792707

mem[ 3 ] 25165824

mem[ 4 ] 5

mem[ 5 ] 3

registers:

reg[ 0 ] 0

reg[ 1 ] 5

reg[ 2 ] 3

reg[ 3 ] 1

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

xor: 5#3=6

0101

#

0011

0110


Програма:

lw 0 1 num1

lw 0 2 num2

xorf 1 2 3

done halt

num1 .fill 3

num2 .fill 5

Машинний код:

8454148

8519685

50987011

25165824

3

5


Кінцевий стан:

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 50987011

mem[ 3 ] 25165824

mem[ 4 ] 3

mem[ 5 ] 5

registers:

reg[ 0 ] 0

reg[ 1 ] 3

reg[ 2 ] 5

reg[ 3 ] 6

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

6. cmpge: 1= 5>=3


Програма:

@@@

state:

pc 4

ZF = 0

stack:

memory:

mem[ 0 ] 8454148

mem[ 1 ] 8519685

mem[ 2 ] 55181315

mem[ 3 ] 25165824

mem[ 4 ] 5

mem[ 5 ] 3

registers:

reg[ 0 ] 0

reg[ 1 ] 5

reg[ 2 ] 3

reg[ 3 ] 1

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

7. jma: if (7>=4) reg[4]=7; else reg[5]=4, reg[4]=7.


Програма:

lw 0 1 num1

lw 0 2 num2

jmae 1 2 1

lw 0 5 num2

lw 0 4 num1

done halt

num1 .fill 7

num2 .fill 4

Машинний код:

8454150

8519687

59375617

8716295

8650758

25165824

7

3


Кінцевий стан:

@@@

state:

pc 6

ZF = 0

stack:

memory:

mem[ 0 ] 8454150

mem[ 1 ] 8519687

mem[ 2 ] 59375617

mem[ 3 ] 8716295

mem[ 4 ] 8650758

mem[ 5 ] 25165824

mem[ 6 ] 7

mem[ 7 ] 4

registers:

reg[ 0 ] 0

reg[ 1 ] 7

reg[ 2 ] 4

reg[ 3 ] 0

reg[ 4 ] 7

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

8. jmnae: if (5!>=6) reg[4]=6; else reg[4]=5, reg[5]=6.


Програма:

lw 0 1 num1

lw 0 2 num2

jmnae 1 2 1

lw 0 5 num2

lw 0 4 num1

done halt

num1 .fill 5

num2 .fill 6

Машинний код:

8454150

8519687

63569921

8716295

8650758

25165824

5

6


Кінцевий стан:

@@@

state

pc 6

ZF = 0

stack:

memory:

mem[ 0 ] 8454150

mem[ 1 ] 8519687

mem[ 2 ] 63569921

mem[ 3 ] 8716295

mem[ 4 ] 8650758

mem[ 5 ] 25165824

mem[ 6 ] 5

mem[ 7 ] 6

registers:

reg[ 0 ] 0

reg[ 1 ] 5

reg[ 2 ] 6

reg[ 3 ] 0

reg[ 4 ] 5

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

9. bsr: if (16=1000) “1” – в позиції 4.


Програма:

lw 0 1 num1

bsr 1 2

done halt

num1 .fill 16

Машинний код:

8454150

8519687

25165824

16


Кінцевий стан:

@@@

state:

pc 3

ZF = 1

stack:

memory:

mem[ 0 ] 8454147

mem[ 1 ] 71958528

mem[ 2 ] 25165824

mem[ 3 ] 16

registers:

reg[ 0 ] 0

reg[ 1 ] -2147483648

reg[ 2 ] 4

reg[ 3 ] 0

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

10. bsf: 8 (1000) – «1» в позиції 3.


Програма:

lw 0 1 num1

bsf 1 2

done halt

num1 .fill 8

Машинний код:

8454147

71958528

25165824

8


Кінцевий стан:

@@@

@@@

state:

pc 3

ZF = 1

stack:

memory:

mem[ 0 ] 8454147

mem[ 1 ] 67764224

mem[ 2 ] 25165824

mem[ 3 ] 8

registers:

reg[ 0 ] 0

reg[ 1 ] 1

reg[ 2 ] 3

reg[ 3 ] 0

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

11. jne: if (16=1000) “1” – в позиції 4, ZF=1: Робота програми завершується, else reg[4]=8.


Програма:

lw 0 1 num1

bsr 1 0 3

jne 0 0 4

lw 0 4 num1

done halt

num1 .fill 8

Машинний код:

8454150

8519687

67764224

8454147

25165824

8


Кінцевий стан:

@@@

state:

@@@

state:

pc 5

ZF = 1

stack:

memory:

mem[ 0 ] 8454149

mem[ 1 ] 71827456

mem[ 2 ] 75497476

mem[ 3 ] 8650757

mem[ 4 ] 25165824

mem[ 5 ] 8

registers:

reg[ 0 ] 0

reg[ 1 ] -2147483648

reg[ 2 ] 0

reg[ 3 ] 0

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

12. push, pop: push 2, push 3, pop, pop.


Програма:

lw 0 1 num1

push

lw 0 1 num2

push

pop

pop

done halt

num1 .fill 2

num2 .fill 3

Машинний код:

8454150

79691776

8454151

79691776

83886080

83886080

25165824

2

3


Проміжний стан, після двох push:

@@@

state:

pc 4

ZF = 0

stack:

stk[ 0 ] 2

stk[ 1 ] 3

memory:

mem[ 0 ] 8454151

mem[ 1 ] 79691776

mem[ 2 ] 8454152

mem[ 3 ] 79691776

mem[ 4 ] 83886080

mem[ 5 ] 83886080

mem[ 6 ] 25165824

mem[ 7 ] 2

mem[ 8 ] 3

registers:

reg[ 0 ] 0

reg[ 1 ] 3

reg[ 2 ] 0

reg[ 3 ] 0

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

Кінцевий стан:

@@@

state:

pc 7

ZF = 0

stack:

memory:

mem[ 0 ] 8454151

mem[ 1 ] 79691776

mem[ 2 ] 8454152

mem[ 3 ] 79691776

mem[ 4 ] 83886080

mem[ 5 ] 83886080

mem[ 6 ] 25165824

mem[ 7 ] 2

mem[ 8 ] 3

registers:

reg[ 0 ] 0

reg[ 1 ] 2

reg[ 2 ] 0

reg[ 3 ] 0

reg[ 4 ] 0

reg[ 5 ] 0

reg[ 6 ] 0

reg[ 7 ] 0

end state

Висновок

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

Література

1. Мельник А.О. Архітектура комп’ютера. Наукове видання. - Луцьк: Волинська обласна друкарня, 2008. - 470 с.

2. Жмакин А.П. Архитектура ЭВМ. - СПб.: БХВ-Петербург, 2006. - 320 с.

3. Таненбаум Э. Архитектура компьютера.5-е изд. (+CD). - СПб.: Питер, 2007. - 844 с.

4. Patterson D., and Hennessy J.computer Architecture. A quantitative Approach. Second Edition. - Morgan Kaufmann Publishers, Inc., San Francisco, California, 1996. - 760 p.

Додатки

Доаток I (код програми-асемблера):

/* Assembler for LC */

#include <stdlib. h>

#include <stdio. h>

#include <string. h>

#define MAXLINELENGTH 1000

#define MAXNUMLABELS 65536

#define MAXLABELLENGTH 7 /* includes the null character termination */

#define ADD 0

#define NAND 1

#define LW 2

#define SW 3

#define BEQ 4

#define JALR 5

#define HALT 6

#define NOOP 7

К-во Просмотров: 483
Бесплатно скачать Курсовая работа: Проектування комп`ютера