MC 404C - Arquitetura e Programação de Computadores
- com ênfase em microcontroladores
2o semestre de 2015


Profs. Célio Guimarães e Nelson Machado
Atualizado em 07/Dez/2015

Horário de atendimento: IC1 - sala 47: 2ª a 5ª 18:00 às 19:00hs

Avisos importantes:


Overview do ARM (Wikipedia).
Diagrama de blocos simplificado do ARM.
Veja aqui o ciclo de execução de uma instrução no ARM usando o diagrama acima.
Conjunto minimal de instruções do ARM.
Principais instruções e modos de endereçamento do ARM ( traga nos laboratórios).
Resumo das diretivas do assembler do ARM (inclui exemplo de macros, traga nos laboratórios).
Como escrever programas estruturados em assembler
"Dicas" para depurar programas em assembler do ARM
Introdução ao gdb (traga nos laboratórios).
Manual detalhado de cada instrução do ARM Cortex M3 Cortex M3 instruction set
Instruções adicionais thumb2, instruções de deslocamento e execução condicional de instruções
Introdução a macros para o assembler do gcc
Sugestões para uso do simulador jarm do Prof. Anido.
E/S e interrupções no ARM Cortex M3
Inserindo código assembler em programas em C: inline assembly.
Atividades desafio:
A realização individual de uma dessas atividades dispensará o aluno das provas.
Orientações específicas e condições para fazer o desafio serão negociadas caso a caso, antes da realização da 1a prova. Você pode também negociar fazer um dos desafios após a 1a prova.
  1. Atividade desafio 1 (opcional, individual): cálculo de fatorial com precisão estendida"
  2. Atividade desafio 2 (opcional, individual): implementação de uma sistema para gerenciar listas ligadas ordenadas
  3. Atividade desafio 3 (opcional, individual): implementação de uma rotina printf simplificada
    Esta atividade tem uma aplicação direta no protótipo do Arm Cortex 3 mostrado em aula, onde um terminal virtual é implementado usando a interface Usart do microcontrolador.
  4. Atividade desafio 4 (opcional, individual): núcleo de um sistema operacional de tempo real

  5. Atividade desafio 5 (opcional, individual): o quebra-cabeça dos 12 pentaminós

Atividades obrigatórias

As atividades obrigatórias serão individuais e deverão ser submetidas via sistema Susy (a saída de cada atividade é um arquivo texto que será gerado via função printf).
Atividade 1: Geração da sequencia de Fibonacci com valores < 1000
Data de submissão: 28/08/15 Prazo susy: 18/09 -
Atividade 02: Conversão de valores binários de 32 bits para Ascii-hexadecimal
Data de submissão: 28/08/15 Prazo susy: 23/09
Atividade 03: Geração da sequencia de Fibonaqcci em tempo de montagem
Data de submissão: 17/09/15 Prazo susy: 30/09
Atividade 4: tradução de algoritmo de ordenação de C para assembler
Data de submissão: 28/09 Prazo susy: 21/10
Atividade 5: macro para emular a instrução bfi
Data de submissão: 07/10 Prazo susy: 04/11
Atividade 6: Implementação de um relógio digital/cronômetro
Data de submissão: 08/10/15 Prazo susy: 11/11

Atividade 7: Simulação do relógio digital/cronômetro usando o sistema gráfico jarm
Você deverá fazer uma demonstração no laboratório e entregar uma cópia impressa do código fonte (não será usado o sistema susy para este fim). A demonstração pode ser feita até o prazo de entrega.
Data de submissão: 03/11/15 Prazo susy:25/11/15


Exercícios desafio individuais (se você fizer os 4 ficará dispensado das provas)

  1. Escreva uma subrotina eficiente para emular a instrução rbit, ou seja, inverter os bits de um registrador passado como parâmetro.
    Obs: a instrução ror não ajuda!

  2. Suponha que o registrador LR do ARM está "quebrado" e não pode ser usado. Usando operações sobre a pilha, implemente uma chamada de subrotina. Sugestões: (i)analize o arquivo do seu programa "disassemblado" ao executar o script gcc.sh: no arquivo nome-do-executavel.txt, veja a partir do rótulo "<main>:" as instruções do seu programa, com atenção especial aos endereços gerados.
    (ii) caso seus testes continuem dando "segmentation fault" ou "illegal instruction" lembre-se de que na arquitetura thumb2 os endereços usados em instruções de salto devem ter o bit menos significativo ligado.

  3. Escreva uma subrotina para inserir um campo numa palavra de 32 bits sem alterar os outros bits da palavra.
    Parâmetros: r0= endereço da palavra
    r1 - contem o campo a ser inserido (r1 pode conter mais bits significativos do que o requerido)
    r2 - bit onde começa a inserção (0-31)
    r3 - número de bits a serem inseridos
    Observe que a instrução bfi do ARM é inutil para resolver este problema pois ela requer o uso de constantes para o bit inicial e para o número de bits a inserir

  4. A instrução rev não existe nos processadores ARM da "família A": os engenheiros da ARM criaram uma subrotina "mágica" xchgendian (veja o código neste link), com apenas 4 instruções, e que emula a instrução rev. Prove que, qualquer que seja o argumento, a subrotina funciona.