0% acharam este documento útil (0 voto)
4 visualizações6 páginas

SimuS: Simulador de Arquitetura de Computadores

O artigo apresenta o SimuS, um simulador para o ensino de arquitetura de computadores, desenvolvido para a arquitetura do processador hipotético Sapiens. O SimuS expande as capacidades do simulador Neanderwin, permitindo um maior espaço de endereçamento, novas instruções e uma interface de usuário aprimorada, mantendo compatibilidade com códigos existentes. O simulador é projetado para ser utilizado em cursos de diferentes níveis, desde iniciantes até avançados, e é distribuído como código aberto.

Enviado por

mario.costa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações6 páginas

SimuS: Simulador de Arquitetura de Computadores

O artigo apresenta o SimuS, um simulador para o ensino de arquitetura de computadores, desenvolvido para a arquitetura do processador hipotético Sapiens. O SimuS expande as capacidades do simulador Neanderwin, permitindo um maior espaço de endereçamento, novas instruções e uma interface de usuário aprimorada, mantendo compatibilidade com códigos existentes. O simulador é projetado para ser utilizado em cursos de diferentes níveis, desde iniciantes até avançados, e é distribuído como código aberto.

Enviado por

mario.costa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

SimuS

Um Simulador Para o Ensino de Arquitetura de Computadores

Gabriel P. Silva José Antônio dos S. Borges


Departamento de Ciência da Computação Núcleo de Computação Eletrônica
Universidade Federal do Rio de Janeiro Universidade Federal do Rio de Janeiro
Rio de Janeiro, Brasil Rio de Janeiro, Brasil
gabriel@[Link] antonio2@[Link]

Abstract — Este artigo apresenta o simulador SimuS, processador Sapiens, de modo a obtermos uma arquitetura de
desenvolvido para uma arquitetura do processador hipotético processador com maiores possibilidades. Para isso foram
Sapiens, especialmente concebido para o ensino de arquitetura de introduzidas mudanças que incluem um maior espaço de
computadores, a partir da experiência adquirida no uso e endereçamento de memória, a chamada e retorno de
desenvolvimento do simulador Neanderwin para o processador
Neander-X. No processador hipotético Sapiens, a arquitetura e o
procedimentos, um apontador de pilha e um conjunto mais
conjunto de instruções inicialmente propostos para o processador robusto de instruções, além da emulação de novos dispositivos
Neander são estendidos, de forma a obtermos uma arquitetura de de E/S e atualização da interface de usuário, para representar
processador com mais recursos, permitindo o seu uso desde adequadamente essas novas modificações. Apesar dessas
cursos iniciais até cursos mais avançados. mudanças, não houve perda de compatibilidade, em nível de
linguagem de montagem, com códigos produzidos para as
Keywords—ensino; arquitetura de computadores; Neander; arquiteturas legadas do Neander e Neander-X, ainda podem
Neanderwin; Sapiens; Simus; simulador ser compilados e executados no simulador SimuS.
I. INTRODUÇÃO O simulador SimuS apresenta um ambiente integrado de
desenvolvimento, onde o aluno pode editar, compilar, depurar
Um dos problemas encontrados no ensino de arquitetura de e executar código de programas escritos na linguagem de
computadores é fazer com que os alunos compreendam montagem do processador Sapiens. Na elaboração deste
corretamente o funcionamento de um processador, simulador nos mantivemos fiéis aos conceitos que
proporcionando também uma visão comparativa sobre apresentamos anteriormente, de uso de um ambiente integrado
algumas possibilidades arquiteturais. O uso de simuladores de de desenvolvimento, envolvendo desde a inclusão de um
processadores, sejam eles comerciais ou puramente didáticos, editor do código com uma ferramenta de apoio ao
é uma estratégia comumente utilizada para alcançar estes desenvolvimento inicial do código, passando por um
objetivos. A visão dos componentes, do funcionamento da compilador com informações sobre os erros de sintaxe e
arquitetura do processador, do formato das instruções e dos finalmente um simulador, onde o funcionamento final do
passos necessários para a execução de um programa, são programa pode ser verificado, com acesso a todos os
elementos importantes na formação de um conhecimento elementos que compõem o estado do processador como
sólido do funcionamento dos processadores por parte do acumulador, apontador de instruções, códigos de condição,
estudante. memória, entre outros. O simulador SimuS, por ser distribuído
Ao longo de mais de 10 anos, o simulador Neaderwin [1] e em código aberto, viabiliza a sua expansão (por outros
o processador Neander-X têm sido utilizados, pelos autores e professores ou por alunos em projeto), possibilitando a
por diversos professores em universidades do país, nos cursos exploração de variantes da arquitetura ou adição de novas
iniciais da disciplina de Arquitetura de Computadores. A ferramentas de ensino ou projeto. O código fonte deste
partir da experiência adquirida, iniciamos o desenvolvimento simulador pode ser compilado para obtermos versões binárias
do simulador SimuS, para o processador hipotético Sapiens, para execução tanto para o sistema operacional Windows,
que são ambos apresentados neste artigo. como para o sistema operacional Linux e suas variantes.
A filosofia principal do simulador SimuS é apresentar uma Este artigo está organizado da seguinte maneira: na Seção II
arquitetura que pode ser explorada em diversos níveis de apresentamos os trabalhos correlatos, na Seção III a
complexidade, com o emprego de exemplos mais simples, arquitetura do processador didático Sapiens é detalhada e
para os cursos iniciais, até exemplos mais complexos, para os apresentamos suas instruções e um exemplo de programa em
cursos mais avançados, sempre com o uso da mesma linguagem de montagem. Na seção seguinte discutimos a
ferramenta. Pretendemos ainda que essa ferramenta tenha um interface de usuário do SimuS e finalmente apresentamos as
uso ampliado, tanto para os cursos de Ciência da Computação, conclusões e trabalhos futuros.
como Engenharia de Computação ou Sistemas de Informação.
A arquitetura e o conjunto de instruções inicialmente
propostos para o processador Neander-X são estendidos no
II. TRABALHOS CORRELATOS Neste sentido, apresentamos em 2006 o simulador
Existem muitas ferramentas de simulação para Neanderwin para uma versão estendida dessa arquitetura, que
processadores e microcontroladores comerciais. Os chamamos de Neander-X, ambos descritos em detalhes em [1].
simuladores comerciais mais usados em projetos de Nossa ideia foi unir as estratégias de integração de ferramentas,
equipamentos na atualidade (e que em princípio poderiam ser encontradas nas ferramentas profissionais com uma arquitetura
usados nos cursos básicos de arquitetura de computadores) são simples como a do Neander, que seria expandida para diminuir
os de 8051, ATmega, PIC e variantes de processadores do tipo algumas limitações e ampliar o seu potencial didático.
RISC. São sistemas completos, contendo muitas ferramentas Consolidamos e avançamos nesses conceitos, apresentando
integradas, mas quase todos, sendo destinados ao uso aqui tanto o simulador SimuS quanto o processador Sapiens,
profissional, tendo alguns deles licenças de uso pagas e de uso que são uma evolução do simulador Neanderwin e da
relativamente complexo, inviabilizando o uso amplo no ensino arquitetura Neander-X, mas sempre guardando compatibilidade
de graduação em muitos cursos no Brasil. em nível de linguagem de montagem com os programas já
Na área dos simuladores didáticos existem vários sistemas desenvolvidos para os processadores originais.
desenvolvidos no exterior, muitos deles descritos em [3]. III. A ARQUITETURA DO PROCESSADOR SAPIENS
Como exemplos de simuladores didáticos de processadores
comerciais podemos citar o Abacus, o GNUSim8085 [4] e o A. Apresentação
WinMIPS64 [5]. O Abacus (desenvolvido para Windows) e o A arquitetura do processador Sapiens pode ser facilmente
GNUSim8085 (desenvolvido para plataformas Unix) simulam associada a uma evolução do processador Neander-X que,
o microprocessador 8085 da Intel, que tem sido utilizado com sua simplicidade, é suficiente para introduzir de forma
amplamente no ensino de arquitetura de computadores, devido suave os aspectos centrais do funcionamento de um
à sua simplicidade e por não terem pipeline. Ambos
processador e de sua programação para resolver problemas
apresentam os valores dos registradores no decorrer da
execução das instruções, além de exibir o conteúdo presente na simples. Ao longo dos anos, porém, observamos diversas
memória do processador. O simulador WinMIPS64 simula a limitações quando problemas um pouco mais "reais" eram
arquitetura do processador MIPS64, que utiliza o pipeline. Essa apresentados aos alunos, em particular:
ferramenta possibilita a visualização das instruções passando
pelos diversos estágios do pipeline, além de examinar o  Ínfima quantidade de memória (256 bytes) que
conteúdo de todos os registradores, sejam inteiros ou de ponto limitava o tamanho do programa ou dos dados
flutuante, e também da memória, convenientemente dividida processados;
entre memória de dados e de instruções.  Grande dificuldade de realizar chamadas de rotinas
Há alguns exemplos de ferramentas didáticas para pela ausência de instruções e mecanismos
processadores hipotéticos desenvolvidas no país, entre as quais convenientes;
podemos citar o simulador R2DSim [6], uma ferramenta  Ausência de flags para suporte a aritmética multi-byte;
didática para simulação de uma arquitetura RISC de 16 bits  Limitação do modo de endereçamentos, que
com pipeline de quatro estágios, cujo banco de registradores dificultava até a manipulação de estruturas de dados
possui tamanho e largura configurável. No conjunto de muito simples.
ferramentas apresentadas estão um montador e um simulador
integrados. O SIMAEAC [7] - Simulador Acadêmico para Desta forma, problemas interessantes acabavam sendo
Ensino de Arquitetura de Computadores - implementa um deixados de lado, seja pela impossibilidade ou pelo tempo
subconjunto da arquitetura do processador 8085, mas com uma necessário para desenvolvê-los.
memória de apenas 256 bytes, com um montador e simulador
integrados. Esses dois primeiros exemplos não possuem editor
integrado e não é claro como eventuais mensagens de erro são
apresentadas. Temos ainda o SEAC [8], um simulador online
para uma arquitetura hipotética com pipeline de quatro
estágios, com foco nos passos de microprogramação
necessários para executar cada instrução. Outro simulador
interessante é o W-Neander, produzido como software
companheiro do livro Fundamentos de Arquitetura de
Computadores [2], mas que carece de um montador para
linguagem de montagem e de um editor integrados. A
arquitetura Neander é muito simples e pode ser explicada em
uma ou duas aulas. Avaliamos que o conjunto original de
instruções do Neander apresenta algumas limitações que
dificultam a criação de programas pouco mais do que triviais.
Embora na obra desses autores sejam apresentadas outras
arquiteturas mais sofisticadas, porem há necessidade de
migração de uma ferramenta para outra, na medida em que a Fig. 1. Diagrama em Blocos do Processador Sapiens
complexidade dos processadores aumenta.
00 - Direto: o segundo e terceiro bytes da instrução
A arquitetura do processador Sapiens, cujo diagrama em contêm o endereço do operando;
blocos é mostrado na Figura 1, incluiu, entre outros detalhes:
01 - Indireto: o segundo e terceiro bytes da instrução
 O modo imediato de acesso aos operandos, contêm o endereço da posição de memória com o endereço
simplificando as operações de atribuição de dados; do operando (ou seja, é o endereço do ponteiro para o
operando). Na linguagem de montagem, usou-se como
 Um modo indireto de endereçamento, possibilitando convenção para indicar que um operando é indireto
exercitar as noções de indexação e ponteiros – que são precedê-lo pela letra "@" (arroba);
fundamentais para entendimento de qualquer estrutura
básica de programação; 10 - Imediato 8 bits: o segundo byte da instrução é o
 Operações de entrada e saída de dados próprio operando. Na linguagem de montagem, usou-se
para dispositivos E/S, em espaço de endereçamento como convenção para indicar que um operando é indireto
separado da memória; precedê-lo pela letra "#" (tralha).
 Incremento da largura do apontador de instruções 11 - Imediato 16 bits: os dois bytes seguintes à instrução
(PC) para 16 bits, permitindo endereçar até 64 Kbytes. são utilizados como operando. Na linguagem de
 Um apontador de pilha (SP, do inglês stack pointer), montagem, usou-se como convenção para indicar que um
também de 16 bits, para possibilitar a chamada e o operando é indireto precedê-lo pela letra "#" (tralha). O
retorno de rotinas e procedimentos; montador fica encarregado de gerar a codificação do
 Um código de condição (flag) C (do inglês carry) para operando no tamanho correto de acordo com a instrução. A
o vai-um e também vem-um; única instrução que utiliza este modo é a LDS (Load Stack
 Uma instrução de TRAP para chamada do simulador Pointer).
para realizar operações mais elaboradas de E/S.
C. Códigos de Condição
 Um conjunto novo de instruções de movimentação de A seguir são apresentados os códigos de condição do
pilha, deslocamento do registrador, soma e subtração processador Sapiens, ou seja, flags que indicam o resultado da
com vai-um/vem, entre outras. última operação realizada pela UAL.
B. Formato das Instruções e Modos de Endereçamento  N – (negativo): 1 – o resultado é negativo; 0 – o
As instruções em linguagem de máquina do processador resultado não é negativo
Sapiens podem ter um, dois ou três bytes (8 bits), conforme  Z – (zero): 1 – indica que o resultado é igual a
pode ser visto na Figura 2. Nas instruções, o primeiro byte zero; 0 – indica que o resultado é diferente de
sempre contém o código de operação nos 6 bits mais zero
significativos e, quando for o caso, o modo de endereçamento  C – (vai-um): 1 – indica que a última operação
nos 2 bits menos significativos. As instruções com apenas um resultou em ”vai-um” (carry), no caso de soma,
byte não tem outro operando além do acumulador, que é um ou ”vem-um” (borrow) em caso de subtração; 0 –
operando implícito para quase todas as instruções. As o resultado não deu nem ”vai-um” ou ”vem-um”.
instruções com dois bytes são aquelas que, além do
acumulador, usam um dado imediato de 8 bits como operando D. Descrição das Instruções
no segundo byte da instrução. O conjunto original de instruções foi expandido para
permitir uma maior capacidade de processamento. Todas as
instruções originais do Neander-X foram mantidas, com
exceção da instrução LDI (load immediate), que ainda é aceita
pelo novo montador, mas na geração do programa em
linguagem de máquina foi substituída pela instrução LDA
#imed, que realiza a mesma função. Ou seja, um código
escrito para os processadores Neander ou Neander-X é
totalmente compatível e executado sem problemas no SimuS.
Fig. 2. Formato da Instrução do Processador Sapiens Como destaque para as novas instruções introduzidas na
arquitetura temos a adição e subtração com carry, (ADC e
Nas instruções com 3 bytes os dois últimos bytes podem SBC), novas instruções lógicas como “ou” exclusivo,
conter o endereço de memória do operando (modo direto), ou deslocamento para a direita e esquerda do acumulador (XOR,
o endereço de memória do ponteiro para o operando (modo SHL, SHR e SRA), novas instruções de desvio condicional
indireto) ou ainda o próprio operando (modo imediato de 16 (JP, JC, JNC), instruções para chamada e retorno de
bits). Note que nos dois primeiros modos de endereçamento o procedimento (JSR e RET), instruções para a manipulação da
operando em si possui apenas um byte de comprimento. A pilha (PUSH e POP), além da própria inclusão do apontador
codificação para o modo de endereçamento é a seguinte: de pilha (SP) e das instruções de carga e armazenamento do
apontador de pilha em memória (LDS e STS).
As instruções lógicas e aritméticas (ADD, ADC, SUB, Mnemônico Código Descrição
SBC, NOT, AND, OR, XOR, SHL, SHR, SRA) e as JC @ender endereço, apenas se C =1
instruções de transferência LDA, LDS e POP afetam apenas JNC ender Desvia a execução do programa para o
os códigos de condição N e Z de acordo com o resultado 1011 010x
JNC @ender endereço, apenas se C = 0
produzido. As instruções lógicas e aritméticas (ADD, ADC, IN ender8 1100 0000
Carrega no acumulador o valor lido no
SUB, SBC, SHL, SHR, SRA) afetam também o código de endereço de E/S
Descarrega o conteúdo do acumulador
condição C de acordo com o resultado produzido. As demais OUT ender8 1100 0100
no endereço de E/S
instruções (STA, STS, JMP, JN, JP, JZ, JNZ, JC, JNC, JSR, JSR ender
1101 000x Desvia para procedimento
RET, PUSH, IN, OUT, NOP e HLT) não alteram os códigos JSR @ender
de condição. RET 1101 1000 Retorno de procedimento

A seguir apresentamos uma tabela completa com as Coloca o conteúdo do acumulador no


PUSH 1110 0000
topo da pilha
instruções do Sapiens e os respectivos códigos de operação. Retira o valor que está no topo da
POP 1110 0100
pilha e coloca no acumulador
TABELA I. TABELA DE INSTRUÇÕES TRAP ender Instrução para emulação de rotinas de
1111 0000
TRAP @ender E/S pelo simulador
Mnemônico Código Descrição
NOP 0000 0000 Não faz nada HLT 1111 1111 Para a máquina
STA ender Armazena o acumulador (um byte) na
0001 000x
STA @ender memória Foi definida uma linguagem de montagem (assembly
STS ender Armazena o apontador de pilha (dois
STS @ender
0001 010x
bytes) na memória language) para este processador obedecendo às regras
LDA #imed usualmente encontradas nos sistemas comerciais e
Carrega o operando (um byte) no
LDA ender 0010 00xx
acumulador compatíveis com a sintaxe previamente utilizada no simulador
LDA @ender Neanderwin. A sintaxe completa dos comandos do montador,
LDS #imed16
LDS ender 0010 01xx
Carrega o operando (dois bytes) no assim como exemplos mais sofisticados de sua utilização
apontador de pilha (SP) podem ser encontrados na referência [Neander-X]. Na maioria
LDS @ender
ADD #imed
Soma o acumulador com o operando
são mnemônicos e comandos com sintaxe simplificada e de
ADD ender 0011 00xx fácil utilização. A seguir um exemplo de programa em
(um byte)
ADD @ender
ADC #imed
linguagem de montagem para o processador Sapiens:
Soma o acumulador com o carry (flag
ADC ender 0011 01xx
C) e com o operando (um byte)
ADC @ender
SUB #imed ORG 0
Subtrai o acumulador do operando INICIO:
SUB ender 0011 10xx
(um byte) ; Faz a leitura do painel de chaves
SUB @ender
IN 0
SBC #imed
Subtrai o acumulador do carry (flag STA A
SBC ender 0011 11xx
C) e do operando (um byte) ; Se a entrada for 0 termina o programa
SBC @ender
AND 0
OR #imed
Realiza um ''ou'' bit a bit entre o JZ FIM
OR ender 0100 00xx ; Testa se é par (bit 0=0)
acumulador e o operando (um byte)
OR @ender LDA A
XOR #imed Realiza um ''ou exclusivo'' bit a bit AND #1
XOR ender 0100 01xx entre o acumulador e o operando (um JNZ SENAO
XOR @ender byte) ; Se for, faz pares++
AND #imed LDA PARES
Realiza um ''e'' bit a bit entre o
AND ender 0101 00xx ADD #1
acumulador e o operando (um byte)
AND @ender STA PARES
Complementa ('0'  '1' e '1'  '0') os JMP INICIO
NOT 0110 0000
bits do acumulador. SENAO:
Deslocamento do acumulador de um ; Incrementa I
SHL 0111 0000
bit para a esquerda, através do carry LDA IMPARES
Deslocamento do acumulador de um ADD #1
SHR 0111 0100
bit para a direita através do carry STA IMPARES
Deslocamento do acumulador de um JMP INICIO
SRA 0111 1000
bit para a direita através do carry FIM: HLT
JMP ender Desvia a execução do programa para o
1000 000x
JMP @ender endereço
ORG 100
JN ender Desvia a execução do programa para o
1001 000x A: DS 1
JN @ender endereço, apenas se N = 1
PARES: DS 1
JP ender Desvia a execução do programa para o IMPARES:DS 1
1001 010x
JP @ender endereço, apenas se N = 0 e Z = 0 END 0
JZ ender Desvia a execução do programa para o
1010 000x
JZ @ender endereço, apenas se Z = 1
JNZ ender Desvia a execução do programa para o
1010 010x
JNZ @ender endereço, apenas se Z = 0
JC ender 1011 000x Desvia a execução do programa para o
E. Simulando operações de E/S usando a instrução TRAP #7 – chama uma rotina para retornar um número
A necessidade de ensinar técnicas de entrada e saída num pseudoaleatório entre 0 e 99 no acumulador. O operando da
momento preliminar do ensino, sempre foi uma das mais instrução TRAP tem o endereço com a variável com a semente
problemáticas observadas em nossa experiência didática. inicial.
Mesmo em qualquer problema menos trivial, havia a IV. A INTERFACE DE USUÁRIO DO SIMULADOR SIMUS
necessidade de realizar leituras e escritas de dados, porém isso
exigia do aluno conhecimentos específicos ainda não Mantivemos a interface básica do simulador do
aprendidos nas primeiras aulas (laços, testes, polling, flags, Neanderwin, acrescentando mais algumas funcionalidades e
etc.). Desta forma se tornava quase mandatório que os agora destacando os módulos de E/S, que estão em janelas que
primeiros programas fossem centrados em resolver problemas são ativadas apenas quando for conveniente para o usuário.
abstratos usando valores pré-carregados na memória. Desde o início do projeto do simulador SimuS nosso objetivo
Isso poderia ser resolvida, por exemplo, com a inclusão de era facilitar ao máximo as atividades didáticas do professor e o
um pequeno kernel pré-carregado em linguagem de máquina apoio mais completo possível para as dificuldades comuns do
na memória do simulador SimuS, que fornecesse diversas aluno. Para isso foi criado um ambiente integrado para
funcionalidades (leitura e escrita simplificada, formatação de desenvolvimento, com versões para os sistemas operacionais
dados, funções específicas dos dispositivos, etc.). Porém, isso Windows e Linux, e que inclui os seguintes módulos:
acabaria por tornar ainda mais complexo o processo de ensino,  Editor de textos integrado, que possibilita a abertura,
na medida em que professores e alunos ficariam tentados a edição e salvamento de arquivo com o código em
explorar este código, desfocando o objetivo principal que é o linguagem de montagem.
de ensinar arquitetura de computadores. Além disso, a  Montador (assembler) também integrado, gerando o
presença deste código pré-definido tornaria ainda mais código objeto final em linguagem de montagem.
limitado o uso do recurso já tão escasso como a memória. Possui compatibilidade com programas escritos para
Optamos então por criar uma abstração, similar àquela o Neander ou Neander-X.
apresentada em processadores reais para chamar funções de
 Simulador da arquitetura, com visualização e
sistema operacional: a operação TRAP. Em nosso caso,
modificação dos elementos arquiteturais do
porém, o sistema operacional é algo abstrato, sendo que na
processador, tais como registrador de instrução,
verdade essas funcionalidades são implementadas diretamente
apontador de instrução, apontador de pilha,
no simulador.
acumulador, flags N, Z e C; além da execução passo-
Neste mecanismo a instrução TRAP é interpretada pelo
a-passo ou direta.
simulador como um pedido para que ele realize uma
 Módulo de depuração, definindo pontos de parada e
determinada operação de E/S. O número do trap, ou seja, a
variáveis em memória para serem monitoradas, em
função que está sendo solicitada é passada no acumulador.
caso de mudança de valor a execução é interrompida.
Como o processador Sapiens é carente de registradores, a
instrução TRAP tem um operando adicional que é o endereço  Visualização e modificação da memória simulada, no
de memória onde os parâmetros adicionais necessários são formato hexadecimal os endereços e também para
passados para o módulo do simulador responsável pela seu conteúdo, agora expandida para 64 Kbytes.
realização da operação. Temos previsão para suportar  Ferramenta de apoio ao aprendizado de instruções,
inicialmente as seguintes operações: com ajuda integrada ao editor de textos, para a
#1 – leitura de um caractere da console. O código ASCII geração de código em linguagem de montagem do
correspondente é colocado no acumulador. processador Sapiens.
 Utilitário para conversão de bases binária, decimal e
#2 – escrita de um caractere que está no endereço definido hexadecimal.
pelo operando da instrução TRAP na console.  Simulador de dispositivos de E/S, que inclui o
#3 – leitura de uma linha inteira da console para o tradicional painel com 8 chaves e visor hexadecimal,
endereço definido pelo operando da instrução TRAP. acrescidos de um teclado de 12 teclas e um painel de
2 x 16 linhas. Estes dispositivos são acessados no
# 4 – escrita de uma linha inteira na console. O operando espaço de endereçamento de E/S convencional com
da instrução TRAP contém o endereço para a cadeia de instruções de IN e OUT.
caracteres que deve ser terminada pelo caractere NULL  Dispositivos especiais como uma console virtual,
(0x00). O tamanho máximo da cadeia é de 128 caracteres. acessada pelo mecanismo descrito anteriormente.
# 5 – chama uma rotina de temporização. O operando da Com esse mecanismo outros módulos mais
instrução TRAP contém o endereço da variável com o tempo a complexos possam ser facilmente instalados, sem
ser esperado em milissegundos. necessidade de expor esta complexidade para os
usuários.
# 6 – chama uma rotina para tocar um tom. A frequência e  Gerador/carregador de imagem da memória
a duração do tom estão em duas variáveis inteiras no endereço simulada, podendo ser salva em formato
definido pelo operando da instrução TRAP. hexadecimal. Note que neste caso a compatibilidade
entre o SimuS e o Neanderwin não é mantida, ou Mesmo sabendo que as calculadoras do Windows e do Linux
seja, a imagem salva em um simulador não pode ser exibem resultados em várias bases, incluímos um conversor de
carregada em outro. bases, que é muito mais simples.
A Figura 3 mostra a aparência da tela principal do V. CONCLUSÕES
simulador SimuS. Na parte superior estão o menu geral de
Apresentamos neste artigo o SimuS, simulador para uma
operação (Arquivo, Editar, etc.) e diversos botões usados em arquitetura hipotética do processador Sapiens, uma extensão do
conjunto com o editor de textos, que seguem o estilo usual de processador Neander-X. Entre as diversas novidades que
programas com interface gráfica. apresentamos podemos destacar uma nova interface de usuário,
com novos módulos de E/S e um arquitetura de processador
atualizada com novas instruções, como chamada e retorno de
procedimento, mantendo ainda compatibilidade com códigos
em linguagem de montagem desenvolvidos para o simulador
Neanderwin, há mais de 10 anos em uso. Esperamos com essas
modificações adicionais estender a possibilidade de uso do
simulador SimuS em cursos mais avançados de arquitetura de
computadores e programação em linguagem de montagem,
permitindo aos alunos e professores explorar o potencial desta
nova proposta, de modo a facilitar o ensino e aprendizado de
arquitetura de computadores nas universidades do país. O
código fonte está disponível em repositório público e os
autores se colocam à disposição para apoio em futuras
modificações que venham a ser implementadas no simulador
SimuS.
Como trabalhos futuros há diversas propostas. Uma delas é
internacionalizar o simulador, apresentando versões em
espanhol e, também, em inglês. Adicionalmente, pretendemos
desenvolver um compilador para uma linguagem de alto nível
como BASIC, onde a tradução de programas simples em alto
Fig. 3. Tela Principal do Simulador SimuS nível possa ser visualizada como instruções em linguagem de
montagem do processador Sapiens. Pretendemos ainda
Uma vez criado o programa ele será compilado, o que implementar uma versão simples com pipeline da arquitetura
provoca o aparecimento de uma janela pop-up com a para facilitar a apresentação destes conceitos em cursos mais
listagem, cujo formato de saída é similar à maioria dos avançados.
montadores profissionais, com indicação dos eventuais erros
REFERÊNCIAS
de compilação. O programa compilado é carregado
imediatamente na memória, sendo o conteúdo atualizado e [1] J. A. S. Borges, G. P. Silva “NeanderWin - um simulador didático para
uma arquitetura do tipo acumulador”. WEAC, 2006.
exibido no painel correspondente. Caso se deseje, é possível
[2] R. F. Weber, Fundamentos de Arquitetura de Computadores. 2. Ed.
copiar o conteúdo desta janela para a área de transferência, Porto Alegre: Instituto de Informática da UFRGS: Sagra Luzzatto, 2001.
para colar em algum editor de textos possibilitando eventuais [3] Bosko Nikoli and Veljko Milutinovic,, “A survey and evaluation of
embelezamentos e impressão a posteriori. simulators suitable for teaching courses in computer architecture and
organization”, IEEE Transactions on Education, Vol. 52, No. 4,
O número de instruções do processador Sapiens é November 2009
relativamente pequeno, mas apesar disso notamos que é [4] Z. Sridhar, (2002) “GNUSim8085, versão 1.3”,
importante tornar disponível uma “ajuda online” interativa, [Link] 23 de Junho
de 2009
que é ativada pelo menu do programa, um sistema de entrada
[5] M. Scott, “WinMips64, version 1.57”, [Link] de
interativa de instruções e pseudo-instruções. A função de Julho de 2016.
criação tutorada de programas faz com que o aluno cometa [6] A. A. Moreira, C. A. P. S. Martins, “R2DSim: simulador didático do
menos erros e a compreenda melhor o significado das RISC reconfigurável”. 2009.
instruções e produza uma sintaxe das instruções mais correta, [7] A. B. Verona, J. A. Martini, T. L. Gonçalves, “SIMAEAC: Um
de forma interativa. simulador acadêmico para ensino de arquitetura de computadores”.
2009.
Por último, notamos que para muitos estudantes o domínio [8] Erick V. C. L. Borges et alli, “SEAC: um simulador online para ensino
das representações hexadecimal e binária, necessário para de arquitetura de computadores” - WEAC, 2012
verificar e alterar a memória, só se dá depois de algum tempo.

Você também pode gostar