-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathisa.txt
163 lines (125 loc) · 4.67 KB
/
isa.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
Команды:
DATA _ просто записывает данные в регистр данных
MOVE _ _ запись/перенос/клонирование/перезапись данных из одного регистра в другой
ADD _ _ сложение данных в двух регистрах и запись результата в первый
SUB _ _ вычитание регистра 2 из регистра один и запись результата в регистр один
JMP безусловный переход исполнения программы на адрес который указан в регистре JR
JZ _ переход исполнения программы на адрес который находится в регистре JR в случае если регистр один равен 0
JNZ _ переход если не 0
JP _ переход если регистр позитивный
JN _ переход если регистр негативный
STORE _ записывает в регистр 1 данные из выбранной ячейки памяти
LOAD _ записывает данные из регистра один в выбранную ячейку памяти
NOT _ операция логическое НЕ
AND _ _ логическое И
OR _ _ логическое ИЛИ
SHL _ сдвиг битов в лево 0001 -> 0010
SHR _ свдиг битов в право 0010 -> 0001
----------------------------------------------------------------------------
|Команды которые на вход принимают два регистра работают по следующием |
|MOVE R0 R1 |
|Переместить из R0 в R1 |
| |
|ADD R0 R1 |
|Сложить R0 и R1 и записать в R1 |
|MOVE из _ в _ |
|MOVE R0 R1 | из R0 в R1 | R0 -> R1 |
----------------------------------------------------------------------------
Регистры:
D - регистр данных
JR - регистр перехода тут хранистя адрес памяти куда будет переход если будет вызван jmp/jz
MAR - регистр памяти данных
PCAR - регистр памяти комманд (program counter adress register) указатель на комманду в ROM
IR - регистр инструкций
R0 - регистр общего назначения
R1 - регистр общего назначения
R2 - регистр общего назначения
Пример кода сложение двух чисел и запись ее в ячейку памяти по адресу 1
data 2
move d r0
data 3
move d r1
add r0 r1
data 1
move d mar
store r1
пример кода перехода по метке:
data 0
move d r0
data LABEL1
move d jr
jz r0
...some code
LABEL1:
...other code
пример кода цикла:
data 5
move d r0
LOOP:
data 1
move d r1
sub r0 r1
move r1 r0
data LOOP
move d jr
jnz r0
Машинные инструкции для каждой команды
data 0000000000000000 ****************
move 0000************
add 0001************
sub 0010************
not 0011************
and 0100************
or 0101************
shl 0110************
shr 0111************
старшие биты долджны быть 0000
jmp 0000 0001[****]**** // jump
jz 0000 0010[****]**** // jump if zero
jnz 0000 0011[****]**** // jump if not zero
jp 0000 0100[****]**** // jump if positive
jn 0000 0101[****]**** // jump if negative
load 0000 1000[****]**** // load from memory
store 0000 1001[****]**** // write to memory
структура машинного кода
[****](opcode) [****](jmp/load_store) [****](R0)(R_A) [****](R1)(R_B)
тут у нас запомни что из R_A в R_B
R0 0000
R1 0001
R2 0010
D 1000
JR 1001
MAR 1010
16-бит компьютер
Архитектура с общей шиной типа SAP (Simple as Possible) (But how do it know)
Пример программы сложение двух чисел
data 2
move d r0
data 3
move d r1
add r0 r1
hex:
0000
0010
0080
0000
0003
0081
1001
-------
0000
0000
0080
0000
0005
0089
0200
-------------
0000
0003
008a
0000
0001
0080
0900
0810