CI1068 © Roberto André Hexsel, 2019-20
Programação em assembly no Mico XII
Nesta aula usaremos o simulador do Mico XII para simular a execução de
programas escritos em assembly.
Para tirar melhor proveito destas aulas, coloque na sua tela somente
três janelas, um terminal com 85 colunas e 40 linhas, um navegador,
também com largura para aproximadamente 80 caracteres, e o editor de textos
de sua preferência. A figura abaixo mostra uma disposição útil, porque
então você pode seguir este texto ao mesmo tempo em que observa os
resultados da simulação e pode editar o arquivo com seu programa. Da
esquerda para a direita: editor, terminal 85x40 e navegador.
Mais uma novidade excitante e maravilhosamente útil para Computeir{a,o}s
iniciantes: é possível, num sistema projetado por e para Computeir{a,o}s,
trabalhar com mais de uma janela aberta simultaneamente. Não é mágico?
Instalação do simulador
Execute os comandos abaixo para instalar o simulador.
Você pode copiar e colar os comandos, ao invés de copiá-los e digitá-los.
Para copiar, coloque o apontador em cima da linha e clique três vezes com o
botão esquerdo (supondo que você não trocou o mouse de lado); para
colar, aponte o lugar desejado e clique com o botão do meio.
mkdir ${HOME}/mico12
cd ${HOME}/mico12
wget www.inf.ufpr.br/roberto/ci068/Mico12.tgz
tar xzvf Mico12.tgz
make
Para executar o simulador e `executar' o programa no arquivo p.txt
diga
./mico p.txt
É possível que o compilador reclame de ncurses.h. Se este for o
caso, instale a biblioteca libncurses5-dev no seu sistema. Alguma
coisa como o comando abaixo deve resolver. Uma vez instalada a biblioteca,
diga make de novo.
sudo apt-get install libncurses5-dev
A tela do simulador
O simulador só opera corretamente num terminal de 85 colunas e 40 linhas.
A tela do simulador é dividida em oito campos. O topo da tela mostra um
menu com os comandos do teclado que o simulador aceita.
A instrução que está sendo executada é mostrada no centro do quadrado azul,
e é marcada pelo sinal de 'igual'. Depois que a simulação avança, com
SPACE, a sequência de instruções rola para cima, indicando qual é a nova
instrução corrente. As "instruções futuras" são mostradas mesmo na
presença de saltos e desvios.
O quadro verde mostra o estado do processador que resulta da execução da
instrução corrente. O quadro mostra o valor do IP da instrução corrente,
qual é o equivalente binário da instrução, as entradas da ULA (A e beta), a
saída da ULA (C) e qual o IP da próxima instrução.
O quadrado cinza mostra a "saída impressa" do programa, que é o resultado
da instrução show.
O retângulo vermelho mostra o estado de todos os registradores.
O retângulo magenta mostra 32 instruções do programa. A coluna da esquerda
é o endereço hexadecimal da primeira instrução no lado direito.
O retângulo amarelo mostra 32 palavras da memória de dados. A coluna da
esquerda é o endereço hexadecimal da primeira palavra no lado direito.
O retângulo branco mostra 32 palavras no endereço mais alto da memória de
dados, aonde é alocada a pilha do programa. A coluna da esquerda é o
endereço hexadecimal da primeira palavra no lado direito.
Se a tela do terminal ficar esquisita depois de sair do simulador, digite
reset
clear
e a tela deve voltar ao normal.
Comandos
- SPACE avança a simulação de uma instrução;
- r recarrega o arquivo com o programa e reinicializa os
registradores em zero;
- g executa a simulação até encontrar um HALT, exibe a tela e
espera por entrada. Quando um caractere for digitado, interrompe a
simulação;
- q interrompe a simulação
- c|C rola o conteúdo da memória de programa para endereços
maiores (c) ou para enderços menores (C);
- d|D rola o conteúdo da memória de dados para endereços
maiores (c) ou para enderços menores (C);
- s|S rola o conteúdo da memória de pilha para endereços
menores (s) ou para enderços maiores (S).
Arquivo de entrada
O arquivo de entrada para o simulador deve ser formatado como segue, da
esquerda para a direita:
os primeiros oito caracteres são o código binário da instrução,
representado em hexadecimal, com as letras a..f em minúsculas;
o nono caractere pode ser espaço em branco ou fim_de_linha;
se o nono caractere é espaço, então os caracteres seguintes são ignorados e
servem como comentário. No arquivo p.txt, a segunda coluna é o
endereço da instrução (que é também o número da linha do código), e as
colunas seguintes são a instrução do assembly do Mico;
a última linha deve ser vazia, somente com o caractere ENTER (fim_de_linha).
O arquivo p.txt serve somente como exemplo de formatação.
É parte do exercício descobrir o que este programa faz;
esta parte não precisa ser enviada ao professor.
8001000b 0 addi r1,r0,11
8003ffff 1 addi r3, r0, -1
b3000000 2 show r3
631a0000 3 slt ra, r3, r1
a1300002 4 st r3, 2(r1)
730d0000 5 not rd, r3
91090002 6 ld r9, 2(r1)
8909ffff 7 addi r9,r9, -1
b9000000 8 show r9
01330000 9 add r3, r3, r1
d1000000 a jr r1
00000000 b slt r0,r0,r0
c0000002 c jal 2
00000000 d add r0,r0,r0
00000000 e add r0,r0,r0
00000000 f
00000000 10
00000000 11
00000000 12
f0000000 13 halt # linha em branco é necessária aqui
Primeira parte da tarefa.
Segunda parte da tarefa.
--fim da aula--