Escolar Documentos
Profissional Documentos
Cultura Documentos
Os objetivos básicos de um simulador para este fim é endereçar os seguintes aspectos dos
componentes de baixo nível da arquitetura de um computador:
Conjunto de instruções
Registradores
Modos de endereçamento de instruções e dados
Interrupções e exceções
Detalhes do Simulador
Instruções
Registradores genéricos
Registradores especiais
Pilha
Página 1 de 21
Figura 1 Janela principal do simulador
Janela de instruções
Figura 2 Instruções
Página 2 de 21
Registradores Especiais
Registrador Função
PC Program Counter. Contém o endereço da próxima instrução a ser executada.
IR Instruction Register. Contém a instrução em execução
SR Status Register. Contém informações relacionadas ao resultado da última
instrução executada.
SP Stack Pointer. Indica o endereço do topo da pilha.
BR Base Register. Contém o endereço base atual.
MAR Memory Address Register. Contém o endereço de memória sendo acessado.
MDR Memory Data Register. Contém os dados que estão sendo transferidos entre
a CPU e a memória.
Além dos registradores, existem três flags, que podem assumir apenas os valores 0 e 1:
Página 3 de 21
Registradores genéricos
Página 4 de 21
Pilha
Figura 5 Pilha
Página 5 de 21
Criando programas
Para utilizar o simulador, é necessário submeter um programa para execução. Existem duas
formas de fazer isso: criando um programa a partir do conjunto de instruções ou em uma
criando o programa em linguagem de alto e posteriormente compilando-o.
O endereço base de memória é o endereço físico inicial que será ocupado pelo programa. Ele
será usado como referência para as instruções que irão compor o programa. Uma determinada
posição de memória só pode ser ocupada por um programa, portanto se estiver trabalhando
com vários programas, deve se tomar cuidado para não ocorrer nenhuma sobreposição.
Uma vez selecionado o nome e endereço base, clique em ADD para criar seu programa.
Página 6 de 21
Figura 8 Lista de Programas
Agora o programa está criado, mas ainda não tem nenhuma instrução.
Para editar o programa, devemos selecionar a aba Edit Program e clicar o botão Add New para
adicionar uma nova instrução.
Ao clicar nos botões de adição de instruções, será exibida a janela com todas as instruções
suportadas pelo simulador, organizadas em categorias.
Página 7 de 21
Figura 10 Janela de instruções
A relação de instruções e suas funções estão no final deste documento, na seção Conjunto de
Instruções.
Dependendo da natureza da instrução ela pode não necessitar de nenhum operador, ou pode
precisar de um ou dois. Os operadores podem ser valores numéricos literais, endereços de
memória ou registradores.
Página 8 de 21
Figura 11 Parâmetros para a instrução MOV
Após identificar os parâmetros para a instrução, basta clicar em NEW para adicionar a
instrução e seus parâmetros serão acrescentados à lista de instruções do programa.
Página 9 de 21
Figura 12 Instrução adicionada à relação para execução
O processo deve ser repetido para todas as instruções que comporão o programa. Ao final do
processo, as instruções estarão relacionadas na ordem que serão executadas.
Página 10 de 21
Figura 13 Programa teste completo
O botão STEP irá executar uma instrução apenas, o botão RUN irá executar o programa inteiro.
O controle deslizando seleciona a velocidade com que as instruções serão executadas e o
botão RESET PROGRAM faz o programa retornar para sua condição inicial.
Página 11 de 21
Criando um programa a partir da linguagem de alto nível
O simulador YASS contém um compilador para uma linguagem de alto nível que reproduz
recursos de linguagens com C e BASIC. Para acessar o compilador, basta clicar no botão
COMPILER na tela principal.
No tela do compilador temos a janela Program Input, onde o programa em código fonte pode
ser editado livremente.
Os programas podem ser salvos e carregados em arquivos formato txt, sem formatação.
Os comandos aceitos pela linguagem constam desse guia na seção Referência da linguagem,
mas também podem ser acessados pelo botão PROGRAM HELPER.
Página 12 de 21
Figura 17 Programa exemplo
Uma vez que o programa tenha sido inserido, basta clicar no botão COMPILE para traduzir o
código fonte para o conjunto de instruções correspondente.
O andamento da compilação será exibido na janela COMPILER PROGRESS, bem como possíveis
erros de sintaxe.
Página 13 de 21
Uma vez que os erros de compilação sejam eliminados, será criado o programa em linguagem
de baixo nível equivalente ao código fonte.
Para carregar o programa compilado em memória e executá-lo, basta clicar no botão RUN.
A partir daí o processo de execução ocorre da mesma forma que com os programas que são
submetidos no formato de instruções.
Página 14 de 21
Conjunto de Instruções
Instrução Descrição
MOV Movimenta dados para um registrador ou um registrador para outro.
Ex: MOV #2, R01 - movimenta o número 2 para o registrador R01,
MOV R01, R03 movimenta o conteúdo doo registrador R01 para o registrador
R03
LDB Carrega um byte da memória para um registrador
Instruções aritméticas
Instrução Descrição
ADD Soma um valor para um registrador ou soma o conteúdo de registradores.
Ex.: ADD #3, R02 Soma o número 3 ao conteúdo do registrador R02,
armazenando o resultado em R02.
ADD R01, R02 Soma conteúdo do registrador R01 ao conteúdo do registrador
R02, armazenando o resultado em R02.
SUB Subtrai um valor de um registrador ou um registrador de outro.
Página 15 de 21
Instruções de controle
Instrução Descrição
JMP Pula para um endereço de instrução incondicionalmente.
Ex.: JMP 100 desvia o fluxo de execução para a instrução localizada no
endereço 100.
JLT Pula para um endereço se menor que (após a última comparação)
Comparação
Instrução Descrição
CMP Compara um valor com um registrador ou um registrador com outro.
Ex: CMP #5, R02 – Compara o valor 5 com o conteúdo do registrador R02.
CMP R01, R03 – Compara o conteúdo dos registadores R01 e R03.
Obs.:
Se R01 = R03, então a flag Z será ligada
Se R01 < R03, então nenhuma a flag será ligada
Se R01 > R03, então a flag N será ligada
Instrução Descrição
IN Recebe um dado (se disponível) de um dispositivo de entrada
Página 16 de 21
Referência da Linguagem de programação
Program
Declaração de início do programa. Deve ser finalizado com um END. O par program / end
delimita o programa.
Formato
END SUB
END
Library
Define uma biblioteca que poderá
Formato
[ <comandos> | <vazio> ]
END SUB
END
If then
Comando condicional.
Formato
Página 17 de 21
IF {<condição> | TRUE | FALSE} THEN
END IF
If then else
Comando condicinal com “senão”.
Formato
ELSE
END IF
While
Comando de loop. Executa um conjunto de comandos enquanto uma condição for verdadeira.
Formato
WEND
For
Comando de loop. Executa um conjunto de comandos enquanto uma condição for verdadeira.
Formato
NEXT
Select
Executa comandos selecionados a partir do conteúdo de uma variável.
Formato
Página 18 de 21
CASE <valor de seleção>
CASE ELSE
END SELECT
Do
Executa um conjunto de comandos enquanto uma condição for verdadeira.
Formato
DO
Break
Interrompe um loop.
Formato
BREAK
Continue
Retorna para o início de um loop.
Formato
CONTINUE
Sub
Declaração de um subrotina
Formato
[ <comandos da subrotina> ]
END SUB
Página 19 de 21
Fun
Declaração de função
Formato
[ <comandos da função> ]
Call
Chama uma função ou subrotina.
Formato
Read
Lê um valor da entrada padrão.
Formato
Write
Escreve uma o resultado de uma expressão para a saída padrão.
Formato
Var
Declara uma variável.
Formato
Página 20 de 21
Atribuição
Para atribuir valores, usa-se o símbolo =.
Formato
<variável>=<expressão>
Expressões Lógicas
E e OU booleanos podem ser expressos de duas formas.
Formato
Comentários
Use o símbolo % para delimitar os comentários do programa
Formato
% [<Comentário>] [ % ]
Página 21 de 21