forked from Wellingborough/LMC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
230 lines (229 loc) · 11.7 KB
/
index.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
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="keywords"
content="LMC, Little Man Computer, Computing, A level, OCR, CPU, Simulator, Simulation, Emulator, Emulation, Central, Processor, Processing, Unit, ALU, MAR, MDR, CU"
/>
<meta
name="description"
content="Little Man Computer (LMC) Simulator. A simple-to-use simulator for the LMC assembly language, suitable for Computer Science Degree, A level and GCSE students"
/>
<meta name="author" content="Mark Gamble" />
<title>Little Man Computer</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td,
th {
border: 2px solid #cccccc;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
</style>
</head>
<body style="font-family: Lato">
<div>
<h1 id="lmc">LMC</h1>
<h2>Wellingborough School - Little Man Computer Simulator</h2>
<p>
Esse site contém uma implementação do
<a href="https://en.wikipedia.org/wiki/Little_man_computer">Little Man Computer</a>
</p>
<p>O simulador é implementado usando JavaScript, HTML e CSS e roda inteiramente no navegador WEB.</p>
<p>É completamente funcional, e inclui diversos programas de exemplo.</p>
<p>
<a
href="LMC0.3.html"
style="
background-color: #4caf50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
"
>Começar!</a>
</p>
<p>
Minha intenção foi criar uma aplicação web simples de usar para ajudar os estudantes a programas na linguagem do LMC.<br>
</p>
<p>
Essa aplicação possui um diagrama clicável da CPU, que é animado quando um programa LMC é executado,
mostrando os valores nos registradores principais, o fluxo de dados dentro da CPU, e as atividades de leitura
e escrita na memória.
</p>
<p>
<img
src="images/CPUSchematic.png"
alt="Picture of the CPU schematic, showing the ALU, Program Counter, Current Instruction Register and other components, along with the information flows between them"
width="600"
style="border: 2px solid #555"
/>
</p>
<p>
Clicando em um registrador quando um programa não está rodando irá apresentar uma breve descrição. Os registradores
apresentados são:
</p>
<p></p>
<table>
<tr>
<th>Registrador</th>
<th>Nome</th>
<th>Proposta</th>
</tr>
<tr>
<td>PC</td>
<td>Program Counter (Contador de Programa)</td>
<td>
O Contador de Programa contém o endereço da próxima instrução a ser buscada da memória. Se você
observar atentamente durante a execução de um programa, irá ver que o PC incrementa em 1
imediatamente após uma instrução ser lida da memória. As instruções de ramificação ('BRA', 'BRZ', e
'BRP') podem mudar o valor do PC, causando um salto na execução do programa para um novo endereço de
memória.
</td>
</tr>
<tr>
<td>CIR</td>
<td>Current Instruction Register (Registrador de Instrução Atual)</td>
<td>
O Registrador de Instrução Atual contém a última instrução buscada da memória via o MDR. Antes da
instrução ser executada, ele deve ser decodificado em uma série de sinais pelo Decodificador.
</td>
</tr>
<tr>
<td>Decoder</td>
<td>Decoder (Decodificador, parte da Unidade de Controle)</td>
<td>
O Decodificador pega o código de instrução do CIR e transforma ele em uma série de sinais para
controlar a execução da instrução.
</td>
</tr>
<tr>
<td>Input</td>
<td>Input Mailbox (Caixa de entrada)</td>
<td>
A caixa de entrada é usada para segurar a entrada de dado do usuário antes dele ser movido para o
acumulador. Quando uma instrução 'INP' é executada, o usuário é solicitado a entrar com o valor que
será colocado na caixa de entrada e então movido para o acumulador.
</td>
</tr>
<tr>
<td>ALU</td>
<td>Arithmetic and Logic Unit (Unidade Lógica e Aritmética)</td>
<td>
A Unidade Lógica e Aritmética é responsável pelas operações de 'ADD' e 'SUB'. Em um processador
moderno, a ALU seria muito mais complexa, mas o conjunto de instruções do LMC possui apenas essas
duas operações.
</td>
</tr>
<tr>
<td>ACC</td>
<td>Accumulator (Acumulador)</td>
<td>
O Acumulador normalmente mantem o resultado da última operação resultante da ALU, mas um valor pode
ser diretamente carregada no acumulador advinda da memória, usando a instrução 'LDA'.
É possível escrever o valor atual do acumulador na memória usando a instrução 'STA'. Finalmente,
o acumulador pode ser carregado por uma entrada do usuário (instrução 'INP') ou usado como saída para
o usuário (instrução 'OUT').
</td>
</tr>
<tr>
<td>MAR</td>
<td>Memory Address Register (Registrador de Endereço de Memória)</td>
<td>
O Registrador de Endereço de Memória mantém um endereço para um local da memória que será lido ou
escrito. Em uma operação de leitura (que poderia estar buscando uma instrução ou lendo um dado), o
valor no endereço de memória será recuperado e colocado na MDR. Em uma operação de escrita (parte
da instrução 'STA'), o valor no MDR será escrito na memória no endereço especificado.
</td>
</tr>
<tr>
<td>MDR</td>
<td>Memory Data Register (Registrador de Dado da Memória)</td>
<td>
O Registrador de Dado da Memória mantém o valor que foi lido da memória, ou que será escrito na memória.
É importante notas que esse valor pode ser uma instrução ou dado. No caso de uma instrução, ele sempre
terá sido lido da memória como parte do ciclo BUSCA-EXECUTA-DECODIFICA. No caso de um dado, o valor
pode ter sido lido da memória (instrução 'ADD', 'SUB' ou 'LDA') ou será escrito na memória (instrução
'STA').
</td>
</tr>
<tr>
<td>SR</td>
<td>Status Register (Registrador de Estado)</td>
<td>
O Registrador de Estado é um componente importante de qualquer processador moderno. Quando a ALU
completa uma operação, o Registrador de Estado é atualizado com uma informação sobre essa operação.
Nesse simulador, apenas 3 bits são usados: O bit menos significativo (bit 0) é uma flag de transbordamento -
se o resultado de uma soma for maior que 999, ou o resultado de uma subtração for menos que -999,
essa flag terá valor 1. Bit 1 é usado para quando o resultado de uma operação é zero, e o bit 2 é
usado para quando o resultado de uma operação é positivo (zero ou mais). Bits 1 e 2 são usados nas
operações de ramificação 'BRZ' e 'BRP'.
</td>
</tr>
<tr>
<td>Output</td>
<td>Output Mailbox (Caixa de Saída)</td>
<td>
A Caixa de Saída é usada para guardar a saída do acumulador. Quando uma instrução 'OUT' é executada,
o valor do Acumulador é movido para a Caixa de Saída e apresentado ao usuário.
</td>
</tr>
</table>
<p>
O editor de código é baseado em um design de tabela, tornando fácil separar os rótulos, operadores, e operandos.
</p>
<p>
Quando um programa está executando, a linha atual do código é mostrada com um ponto verde, e o valor das
variáveis é atualizado no Editor de Código e também na memória.
</p>
<p></p>
<p>
<img
src="images/CodeEditor.png"
alt="Picture of the LMC Code Editor, with a sample program loaded"
style="border: 2px solid #555"
/>
<p></p>
<p>
Programas podem ser salvos no armazenamento local, enviados do armazenamento local, e convertidos para PDF
para impressão (ou incluídos em relatórios de projeto).
</p>
</p>
<p>Quando um programa LMC está rodando, o console provê um resumo de cada operação.</p>
<p>
<img
src="images/Console.png"
alt="Picture of the LMC Console, showing some status information for a running program"
style="border: 2px solid #555"
/>
</p>
<p>
O repositório original do simulador The Little Man Computer pode ser encontrado em:
<a href="https://github.com/Wellingborough/LMC">https://github.com/Wellingborough/LMC</a>
</p>
<p>
<img
src="images/WholeUI.png"
alt="Picture of the LMC full User Interface"
width="800"
style="border: 2px solid #555"
/>
</p>
<p>O código fonte do simulador LMC está disponível sob licença GNU General Public License v3.0.</p>
</div>
</body>
</html>