|
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:
- Devido ao feriado de 8 Dez o exame será realizado dia 9 Dez, 4aF, às 16hs na sala IC353
- Atividades obrigatórias 1-6 instaladas no sistema susy.
- Login e senha para acesso ao sistema Susy: RA (apenas os 6 dígitos) e senha da DAC; use também o e-mail da DAC.
- Critérios de avaliação
- Programa da disciplina
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.
- Atividade desafio 1 (opcional, individual): cálculo de fatorial com precisão estendida"
- Atividade
desafio 2 (opcional, individual): implementação de uma sistema para gerenciar listas ligadas ordenadas
- 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.
- Atividade
desafio 4 (opcional, individual): núcleo de um sistema operacional de tempo real
- 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)
-
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!
-
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.
- 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
- 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.