Tutorial para uso do Simulador do Computador NEANDER Considere o problema de determinar o maior inteiro (positivo) entre três variáveis: A, B e C, e armazenar o resultado numa quarta variável, RES. Vamos adotar a convenção do livro texto (WEBER, ( WEBER, 2002) e usar os endereços de memória entre [128..255] para armazenar dados e constantes. Sendo assim, nossa área de dados da memória do Neander ficará assim:
Figura 1 - Memória do Neander
Conforme resolvido resolvido em sala, sala, uma possível poss ível solução para este problema pro blema está no código a seguir: if ((A-B)<0) { if ((B-C)<0) RES=C else RES=B; } else { if ((A-C)<0) RES=C else RES=A; };
End. 0 2
Instrução LDA 129; 129; (AC=B) NOT NOT ; (complementa B)
End 22 24
Instrução Instr ução LDA 130; 130; (C é maior, AC=C) JMP 37; 37 ; (salta para End. 37)
3 5
ADD 132; 132 ; (soma 1 em B) ADD 128; 128 ; (soma com A)
26 28
LDA 130; 130; (AC=C)
7 9 11
JN 26; 26 ; (se negativo, B maior, salta para 26) LDA 130; 130; (AC=C)
29 31 33
ADD 132 ; (soma 1 em C) ADD 129 ; (soma com A) JN 22; 22; (se negativo, C maior, salta pa ra 22)
12 14 16 18 20
ADD 132; 132 ; (soma 1 em C) ADD 128; 128 ; (soma com A) JN 22 ; (se negativo, C maior, salta para 22) LDA 128; 128; (A é maior, AC=A) JMP 37; 37 ; (salta para End. 37)
35 37 39
LDA 129; 129; (B é maior, AC=B) STA 131; 131 ; (RES=AC) HLT; HLT ; (fim)
NOT NOT ; (complementa C)
NOT; NOT; (complementa C)
O simulador apresenta a interface dividida em três partes:
Programa A seta ao lado da coluna de endereços indica o endereço da instrução que será executada (PC). Observe que, por padrão o programa começa no endereço 0. No canto inferior direito há uma pequena caixa de texto onde deverá ser inserido o código numérico em decimal da instrução que irá ocupar o endereço apontado pela seta verde (PC). Por exemplo, no nosso programa, seria a instrução “LDA 129”. Logo preenche-se 32 (código da instrução LDA, livro págs. 50 e 51) e em seguida ENTER. A seta verde irá mover-se para o endereço 1, onde deveremos entrar com o valor “129”, outro byte componente da instrução, em seguida ENTER. A seta irá mover-se para o endereço 2, correspondente à segunda instrução de nosso código. No canto inferior esquerdo, em vermelho, há uma caixa de texto denominada BP. Nesta caixa é permitido a você a inserção de um endereço de memória (instrução, 0 a 127) onde ocorrerá um breakpoint durante a execução do programa.
Neander Nesta janela são mostrados os valores (conteúdo) dos registradores PC e AC, os bitz N e Z, sob a forma de apagado (0) e aceso (1). Na caixa denominada “Execução” o número de execuções e instruções do programa carregado é exibido. Na caixa “Instrução” um decodificador para as instruções mostra o valor numérico dos 16 bits dessa instrução (8bits+8bits) e o seu significado no código (livro págs. 50 e 51). A exibição pode ser feira em decimal [0..9] ou hexadecimal [0..F].
Os botões indicam, respectivamente: execução direta e execução passo-a-passo. A tabela Mneumônicos apresenta as instruções do Neander e seu código em decimal (livro págs. 50 e 51) para auxiliar o preenchimento das instruções na tela Programa.
Dados Corresponde aos endereços de memória situados entre [128..255] e é destinado ao preenchimento de valores nos endereços das variáveis e das constantes do programa na área de dados da memória do Neander. O preenchimento é feito através da caixa de texto no canto inferior direito da janela Dados e, na figura ao lado, mostra que o endereço 132 foi inicializado com a constante 1, a variável A foi inicializada com o valor 65, B com 8 e C com 200. RES não importa valor inicial.
O simulador permite também que um arquivo seja salvo no formato .MEM (exclusivo dele) ou no formato texto .TXT. Porém, a abertura (carregamento) de um arquivo salvo só é possível no formato .MEM. Ambas opções podem ser acessadas no menu Arquivo da janela Neander.