-
Notifications
You must be signed in to change notification settings - Fork 0
/
TuringCpu.html
135 lines (121 loc) · 5.82 KB
/
TuringCpu.html
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
<!DOCTYPE html>
<html>
<head>
<title>Симулятор CPU на машине Тьюринга</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/elements.css">
<link rel="stylesheet" type="text/css" href="css/code.css">
<link rel="stylesheet" type="text/css" href="css/turing.css">
<link rel="stylesheet" type="text/css" href="css/controls.css">
<link rel="stylesheet" type="text/css" href="css/menu.css">
</head>
<body>
<div class="simulator">
<div class="controls">
<input type="submit" class="button" value="Запустить" id="run-btn">
<input type="submit" class="button" value="Шаг" id="step-btn">
<input type="submit" class="button" value="Сброс" id="reset-btn" >
<input type="submit" class="button" value="Компилировать" id="compile-btn">
<div class="menu">
<div class="menu-icon">
<div></div>
<div></div>
<div></div>
</div>
<div class="menu-items">
<div class="menu-item" onclick="cpu.LoadExample(FIBONACCI_EXAMPLE)">Загрузить пример "Число Фибоначчи"</div>
<div class="menu-item" onclick="cpu.LoadExample(EUCLID_EXAMPLE)">Загрузить пример "Алгоритм Евклида"</div>
<div class="menu-item" onclick="cpu.LoadExample(COLLATZ_EXAMPLE)">Загрузить пример "Гипотеза Коллатца"</div>
<div class="menu-item" onclick="cpu.LoadExample(MEMORY_EXAMPLE)">Загрузить пример "Память и стек"</div>
<div class="menu-item">Разрядность процессора: <input type="number" class="number" id="bit-depth-box" min="2" max="64" value="8"></div>
<div class="menu-item">Количество ячеек памяти: <input type="number" class="number" id="memory-count-box" min="0" max="1024" value="16"></div>
</div>
</div>
</div>
<div class="code">
<div class="header">Программа на ассемблере</div>
<div class="code-area">
<div class="code-input-highlight" id="code-highlight-box"></div>
<textarea class="code-input" id="code-editable-box">
; Симулятор процессора на машине Тьюринга
; https://github.com/dronperminov/TuringCpu
; Пример вычисления числа Фибоначчи по номеру в регистре A
JMP start
.loop:
CALL fibonacci
DEC A ; уменьшаем номер
JNZ .loop
MOV A, B ; записывем результат в А
HLT
start:
MOV A, 11 ; номер числа Фибоначчи
XOR B, B
MOV C, 0x1
CMP A, 12
CMP A, 11
CMP A, 10
JMP .loop
; функция вычисления следующего числа Фибоначчи
; два соседних члена последовательности располагаются
; в регистрах C и B соответственно
; результат записывается в регистр B
fibonacci:
PUSH B ; сохраняем предыдущий член последовательности
ADD B, C ; вычисляем новый
POP C ; возвращаем сохранённый на место предыдущего
RET ; выходим из подпрограммы
</textarea>
</div>
</div>
<div class="view">
<div class="values" id="values-box"></div>
<div class="machine" id="machine-box">
<div class="turing-tape" id="tape-div"></div>
<div class="turing-state" id="state-div"></div>
</div>
</div>
<div class="footer">
<div class="footer-cell">
<label>Шагать по <select id="step-type-box" class="select">
<option value="instructions" selected>инструкциям</option>
<option value="states">состояниям</option>
<option value="cells">ячейкам</option>
</select></label>
</div>
<div class="footer-cell">
<label><input type="checkbox" id="show-state-box" checked>Показывать состояние</label>
</div>
<div class="footer-cell right-part">
Количество шагов: <span id="steps-box">0</span>
</div>
</div>
</div>
<script src="js/integer.js"></script>
<script src="js/constants.js"></script>
<script src="js/highlight_input.js"></script>
<script src="js/turing_cpu.js"></script>
<script src="js/compile.js"></script>
<script src="js/run.js"></script>
<script src="js/states/flags.js"></script>
<script src="js/states/jumps.js"></script>
<script src="js/states/memory.js"></script>
<script src="js/states/stack.js"></script>
<script src="js/states/call.js"></script>
<script src="js/states/fetch.js"></script>
<script src="js/tape.js"></script>
<script src="js/turing_machine.js"></script>
<script src="js/examples/fibonacci.js"></script>
<script src="js/examples/collatz.js"></script>
<script src="js/examples/euclid.js"></script>
<script src="js/examples/memory.js"></script>
<script src="js/examples/arithmetic.js"></script>
<script>
let bitDepth = 8
let memoryCount = 16
let cpu = new TuringCpu(bitDepth, memoryCount)
cpu.turing.ShowInfo()
</script>
</body>
</html>