Recursos para o Livro Arquitetura e Organização de Computadores

Gabriel P. Silva & José Antonio S. Borges - Editora LTC

SimuS

Simulador do Processador Sapiens

Manual de Utilização


1. Introdução

O SimuS (Simulador Sapiens) é uma ferramenta educacional desenvolvida para simular o funcionamento do processador Sapiens. Este simulador permite aos estudantes escrever, compilar e executar programas em linguagem assembly, visualizando em tempo real o comportamento do processador, registradores, flags e memória.

O SimuS oferece recursos avançados de depuração, incluindo execução passo a passo, breakpoints, visualização de memória e portas de entrada/saída simuladas.


2. Interface do Usuário

A interface do SimuS está dividida em três painéis principais, cada um com funções específicas para facilitar o desenvolvimento e depuração de programas.

2.1. Painel Esquerdo - Editor e Execução

Este painel contém três abas que permitem editar código, visualizar erros e acompanhar a execução:

2.1.1. Aba Editor

Área de edição de código assembly com as seguintes características:

2.1.2. Aba Erros

Exibe mensagens de erro geradas durante a compilação:

2.1.3. Aba Execução

Visualização do código compilado com recursos de depuração:

2.2. Painel Central - CPU e Controles

Este painel concentra todos os controles de execução e visualização do estado da CPU:

2.2.1. Botões de Controle

Cinco botões com cores distintas para controlar a execução:

2.2.2. Barra de Status

Exibe o estado atual do simulador em texto cinza, abaixo dos botões de controle. Mensagens incluem: “Pronto”, “Executando…“, “TURBO - Executando…“, “HALT - Programa Finalizado”, entre outras.

2.2.3. Registradores

Três caixas exibindo os valores dos registradores principais em hexadecimal:

2.2.4. Instrução Atual

Caixa com fundo escuro exibindo o mnemônico da instrução atualmente apontada pelo PC. Exemplo: LDA #FF. Esta visualização em destaque amarelo-dourado facilita o acompanhamento da execução.

2.2.5. Flags (Sinalizadores)

Três indicadores visuais que mostram o estado dos flags do processador:

2.2.6. Portas de Entrada/Saída

Interface simulada de periféricos com quatro componentes:

2.3. Painel Direito - Visualização da Memória

Exibe o conteúdo da memória RAM em formato hexadecimal com navegação:

2.3.1. Barra de Navegação

Controles no topo do painel de memória:

2.3.2. Grade de Memória

Visualização em grade hexadecimal com as seguintes características:


3. Barra de Ferramentas de Arquivo

Localizada no topo do painel esquerdo, oferece três botões para gerenciamento de arquivos:


4. Fluxo de Trabalho Típico

Siga estes passos para desenvolver e executar programas no SimuS:

  1. Editar o Código: Na aba Editor, escreva seu programa assembly. Use comentários (;) para documentar o código. Lembre-se de incluir a diretiva ORG para definir o endereço inicial e END para marcar o fim do programa.

  2. Compilar: Clique no botão ✔ Compilar. Se houver erros, corrija-os conforme indicado na aba Erros e compile novamente.

  3. Definir Breakpoints (Opcional): Na aba Execução, clique nas linhas onde deseja pausar a execução. Um círculo vermelho aparecerá no endereço.

  4. Executar: Escolha um modo de execução:
    • Passo: Para depuração detalhada, instrução por instrução
    • Executar: Para velocidade normal, com visualização
    • Turbo: Para programas longos, execução máxima
  5. Acompanhar a Execução: Observe os registradores, flags, memória e portas de I/O sendo atualizados em tempo real. A linha atual é destacada em amarelo na aba Execução.

  6. Interagir com I/O: Quando o programa executar IN 0, digite um valor hexadecimal no campo Entrada (Hex) e pressione ENTER. Valores enviados via OUT são exibidos automaticamente.

  7. Finalizar: O programa para automaticamente ao encontrar HLT. Use o botão Reset para reiniciar e executar novamente.

  8. Salvar: Use 💾 Salvar Como… para guardar seu trabalho em arquivo.

5. Conjunto de Instruções Sapiens

O processador Sapiens implementa as seguintes categorias de instruções:

5.1. Instruções de Transferência de Dados

Mnemônico Nome Descrição
LDA Load Accumulator Carrega AC com valor da memória ou imediato
STA Store Accumulator Armazena AC na memória
LDS Load Stack Pointer Carrega SP com valor de 16 bits
STS Store Stack Pointer Armazena SP na memória (16 bits)

5.2. Instruções Aritméticas

Mnemônico Nome Descrição
ADD Addition AC = AC + operando (atualiza flags)
ADC Add with Carry AC = AC + operando + C (atualiza flags)
SUB Subtraction AC = AC - operando (atualiza flags)
SBC Subtract with Carry AC = AC - operando - C (atualiza flags)

5.3. Instruções Lógicas

Mnemônico Nome Descrição
AND Logical AND AC = AC & operando (atualiza flags)
OR Logical OR AC = AC | operando (atualiza flags)
XOR Exclusive OR AC = AC ^ operando (atualiza flags)
NOT Logical NOT AC = ~AC (atualiza flags)

5.4. Instruções de Deslocamento

Mnemônico Nome Descrição
SHL Shift Left Desloca AC 1 bit à esquerda (bit 0 = 0, C recebe bit 7)
SHR Shift Right Desloca AC 1 bit à direita lógico (bit 7 = 0, C recebe bit 0)
SRA Shift Right Arithmetic Desloca AC 1 bit à direita aritmético (mantém bit 7)

5.5. Instruções de Controle de Fluxo

Mnemônico Nome Descrição
JMP Jump Salta incondicionalmente para endereço
JZ Jump if Zero Salta se flag Z = 1
JNZ Jump if Not Zero Salta se flag Z = 0
JN Jump if Negative Salta se flag N = 1
JP Jump if Positive Salta se flag N = 0
JC Jump if Carry Salta se flag C = 1
JNC Jump if No Carry Salta se flag C = 0

5.6. Instruções de Sub-rotina

Mnemônico Nome Descrição
JSR Jump to Subroutine Salva PC na pilha e salta para sub-rotina
RET Return Retorna de sub-rotina (recupera PC da pilha)

5.7. Instruções de Pilha

Mnemônico Nome Descrição
PUSH Push to Stack Empilha AC (mem[SP] = AC, depois SP–)
POP Pop from Stack Desempilha para AC (SP++, depois AC = mem[SP])

5.8. Instruções de Entrada/Saída

Mnemônico Nome Descrição
IN Input Lê dado da porta especificada para AC
OUT Output Envia AC para porta especificada

Portas de I/O Disponíveis:

Instrução Função
IN 0 Lê valor hexadecimal digitado pelo usuário
IN 1 Lê status da entrada (1 = dado disponível, 0 = sem dado)
OUT 0 Envia AC para display hexadecimal de saída
OUT 2 Limpa o banner de texto
OUT 3 Envia caractere ASCII para banner de texto (adiciona ao final)

5.9. Instruções Especiais

Mnemônico Nome Descrição
NOP No Operation Não faz nada (pode ser usado para timing)
HLT Halt Para a execução do processador
TRAP Trap Gera interrupção (não implementado nesta versão)

6. Modos de Endereçamento

O Sapiens suporta quatro modos de endereçamento, identificados pelos 2 bits mais significativos do opcode:

Bits Modo Exemplo Operação Descrição
00 Direto LDA 50 AC = mem[50] O operando é o endereço na memória do dado
01 Indireto LDA @50 AC = mem[mem[50]] O operando aponta para endereço que contém o endereço final do dado
10 Imediato 8 bits LDA #10 AC = 10 O operando é o byte seguinte à instrução
11 Imediato 16 bits LDS #1000 SP = 1000 O operando são os dois bytes seguintes à instrução

Observações sobre Endereçamento:


7. Formato dos operandos

O Sapiens suporta vários tipos de formatos para os operando das instruçõoes:

8. Diretivas do Assembler

O assembler do SimuS reconhece as seguintes diretivas:

Diretiva Descrição Exemplo Efeito
ORG endereço Define o endereço inicial do programa ORG 0 Programa inicia no endereço 0
END Marca o fim do código fonte END Última linha do arquivo
DB valor Define byte (8 bits) DB #FF Armazena o byte FF na memória
DW valor Define word (16 bits) DW #1234 Armazena word 1234 (little-endian)
DS quantidade Define espaço (reserva bytes) DS 10 Reserva 10 bytes zerados
LABEL: EQU valor Define uma constante (: é opcional) TESTE: EQU 10 TESTE será igual 10

Uso de Rótulos (Labels):

Rótulos podem ser definidos antes de qualquer instrução ou diretiva, terminando com dois pontos:

LOOP:
    LDA VALOR
    JNZ LOOP

9. Exemplos de Programas

9.1. Eco Simples

Programa que aguarda entrada do usuário e ecoa o valor:

; Programa de Eco
ORG 0
LOOP:
    IN 1          ; Lê status
    JZ LOOP       ; Aguarda dado
    IN 0          ; Lê valor
    OUT 0         ; Exibe valor
    HLT
END

9.2. Contador de 0 a 9

Conta de 0 a 9 e para:

; Contador
ORG 0
    LDA #0        ; Inicia em 0
LOOP:
    OUT 0         ; Mostra valor
    ADD #1        ; Incrementa
    SUB #10       ; Compara com 10
    JNZ LOOP      ; Continua se != 10
    HLT
END

9.3. Sub-rotina com Pilha

Demonstra uso de JSR, RET e PUSH/POP:

; Sub-rotina
ORG 0
    LDA #42
    JSR SALVAR    ; Chama sub-rotina
    OUT 0         ; Mostra resultado
    HLT

SALVAR:
    PUSH          ; Salva AC
    LDA #99
    OUT 0         ; Mostra 99
    POP           ; Restaura AC (42)
    RET
END

10. Resolução de Problemas Comuns

Erro: “Instrução Inválida”

Erro: “Rótulo Não Definido”

Programa não executa após compilar

Breakpoint não funciona

Memória não atualiza durante execução

IN não lê o valor digitado


11. Dicas e Boas Práticas


12. Conclusão

O SimuS é uma ferramenta completa para aprendizado de arquitetura de computadores e programação em assembly. Através de sua interface intuitiva e recursos avançados de depuração, estudantes podem experimentar conceitos fundamentais como:

Este manual cobre os aspectos essenciais do simulador. Para questões adicionais ou suporte técnico, consulte a documentação do processador Sapiens ou entre em contato com o desenvolvedor.

Bons estudos e boa programação!