MC404    -    2º Semestre 2010

Profs. Mario L. Côrtes, Paulo Centoducatte, Ricardo Pannain


Atividade opcional:  Vários


  • A) Escreva um trecho de programa contendo apenas uma instrução lógica e saltos 
  • condicinais apropriados, para verificar se um inteiro com sinal em um registrador é 
  • positivo, negativo, par ou ímpar. Desenhe os arcos onde há saltos e verifique se o 
  • número de cruzamentos de arcos é mínimo.

  • B) Modifique o exemplo de botões que acendem leds de forma que os botões funcionem
  • como "toggles" ou seja o led não deve apagar quando o botão é liberado, somente quando
  • for pressionado novamente. Dica: guarde o estado do botão e da sua ação.

  • C) Escreva uma subrotina que toma como parâmetros em X um inteiro sem sinal de 16 bits e
  • em Y um endereço na memória RAM a partir do qual você deve armazenar a representação
  • em ASCII do valor decimal de X, ou seja a subrotina faz a conversão de binario para decimal
  • ASCII. Sugestão: se você armazenar as constantes 10000, 1000, 100 e 10 na memória de
  • programa (use a diretiva .dw para isso) poderá fazer a conversão com uma subrotina contendo
  • apenas 21 instruções! Ela seria util em aplicações onde você queira, por exemplo, visualizar em
  • decimal num display LCD valores binários de 16 bits.

  • D) Desafio: este exercício explora a sobreposição de espaços de endereçamento do AVR:
    escreva duas rotinas, savgpr e rstgpr para,respectivamente, salvar na pilha e restaurar da pilha 
  • o valor de todos os 32 registradores de uso geral. Cada rotina deve ter um comprimento de até 
  • 20 instrucoes , e pode usar até 35 posições na pilha. A rotina savgpr pode destruir quaisquer 
  • registradores, depois de salvá-los, obviamente, e pode deixar o que quiser na pilha, em qualquer 
  • ordem, respeitado o limite acima. A rotina rstgpr deve desfazer completamente o que foi feito 
  • por savgpr, restaurando todos os 32 registradores para seus valores imediatamente antes da 
  • chamada de savgpr; a pilha deve também ser deixada exatamente como estava imediatamente 
  • antes da chamada de savgpr.