CI1068                                        © Roberto André Hexsel, 2019-20


Programação em assembly no Mico XII - funções

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. três janelas

Instalação do simulador

Se você não alterou a instalação desde o laboratório anterior, pule esta parte. 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

A tela do simulador é dividida em oito campos. O topo da tela mostra um menu com os comandos do teclado que o simulador aceita. tela do simulador 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

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, representados 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/instrução deve ser terminada com um ENTER.
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 2(r1), r3 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--