Roteiro 2 – EA871/1S2013 – Turmas L, Q e R
Prof. Léo Pini Magalhães (v2)
Inicialização ao uso do ColdFire MCF52221. Uso de Registradores.
Exemplo do MDC.
• Iniciação ao microcontrolador ColdFire MCF52221 através de programas simples em
linguagem Assembly
Introdução ao experimento de hoje
O experimento tem como objetivo iniciar o aluno à prática e manuseio do microcontrolador
ColdFire MCF5221. É introduzida a linguagem de programação Assembly (de máquina ou
montagem) através de exemplos simples e também do algoritmo de cálculo do Máximo Divisor
Comum. Este roteiro está organizado nas seguintes seções:
• Roteiro de Estudos: série de perguntas elaboradas, que servem de guia para o aprendizado do
conteúdo julgado essencial à realização da experiência. Observe que, não é necessária a
entrega desta série de perguntas. Use as questões para estudar antecipadamente para
este Relatório 2.
• Recomendações à confecção do relatório: apresenta as recomendações que devem ser
seguidas para apresentação dos relatórios referentes aos experimentos realizados.
• Relatório: conjunto de exercícios que devem ser respondidos e entregues em forma de
relatório ao final da aula / pelo TelEduc.
• Referências: lista de referências que devem ser consultadas para a realização do estudo e
tarefas associadas aos roteiros.
Roteiro de Estudos (realize na semana que antecede o lab.)
A lista de questões a seguir é uma sequência sugerida para o estudo do microcontrolador ColdFire
MCF52221. É imprescindível o entendimento do conteúdo deste estudo para a realização da
experiência e a resposta a estas questões capacitará o aluno a trabalhar os conceitos e informações
básicas associadas às atividades a serem desenvolvidas. Repetimos, não é necessário entregar as
respostas.
1. O que é um microcontrolador? Ilustre qual é a diferença dele com um microprocessador.
2. Dê exemplos de onde microcontroladores são usados e o nome de alguns existentes no
mercado.
3. É correto afirmar que o microcontrolador MCF52221 (doravante denominado MCF) tem
uma CPU ? Ilustre e explique sua afirmação.
4. Em geral, quais são as unidades consideradas clássicas, componentes de um
microcontrolador? [RefRapidaMCF] [RefRapidaMCF] [RefRapidaMCF], [Daltrini]
5. Os principais registradores do MCF são os de dados, os de endereço, o PC, o CCR e o SP.
Represente-os graficamente e descreva, sucintamente, a função e tamanho (bits) de cada um
deles.
6. Quantos bits tem um endereço no MCF? A forma de acesso à memória no MCF é
realizada por qual endereço - por byte, palavra, palavra longa ? Explique e ilustre.
7. Quantas memórias de execução o MCF tem disponível. Como se faz para ter acesso a
elas ? Qual é a memória de livre acesso para execução de instruções e programas?
[MCF52223RM], [RefRapidaMCF]
8. Qual a diferença entre linguagem de máquina e linguagem simbólica (Assembly)? Dê 1
exemplo de cada, utilizando a linguagem Assembly do ColdFire MCF52221. (Veja ref.
[CFPRM])
9. Através do conceito dos termos: "sintaxe, semântica e análise" defina e explique,
sucintamente, o que é compilação e o que é montagem e, também, no que se difereciam.
10. Constantemente, precisamos nos referir a posições de memória do MCF. Isso é feito
através dos modos de endereçamento. O que é isso?
11. O MCF tem 12 modos de endereçamento. Explique e dê um exemplo para os seguintes
modos: registrador direto – dado e endereço, registrador indireto, absoluto short e long,
imediato (definidos no Chapter 2 Addressing Capabilities da referência [CFPRM]).
12. O que é endereço efetivo, <ea>, de uma instrução? Exemplifique-o. O <ea> pode ser
completamente definido pelo código de máquina da instrução? Dê um exemplo. Na
linguagem Assembly o conhecimento de todos modos de endereçamento é imprescindível ?
13. É possível mover o conteúdo de uma certa posição de memória para outra através de
uma única instrução de MOVE? Caso sim, mostre como. Se não, mostre a seqüência de
instruções que o fazem. Dica: veja 3.1.1 Data Movement Instructions. [CFPRM]
14. Para quais representações numéricas o MCF tem suporte nativo de instruções?
Recomendações para a confecção de todos os relatórios
Para facilitar o processo de correção e reforçar a necessidade profissional de procurar sempre
produzir material claro e organizado, principalmente quando estes serão apresentados a outros,
segue um conjunto de observações, que devem ser atendidas na confecção dos relatórios desta
disciplina.
• Apresentar no início do relatório: A atividade a que se refere o relatório; o professor e a
turma; nome e RA do(s) autor(es) do relatório;
Exemplo:
EA-871 Laboratório de Computação
Relatório 2 – dd/mm/aaaa
Autor:Beltrano de Tal RA YYYYYY Turma:
• Identificar claramente os exercícios e suas respostas (copiar o enunciado).
• Identificar claramente as respostas associadas a itens e subitens. Caso a solução seja um
programa, indicar no corpo do relatório o anexo que contém a listagem do programa. É
importante que os anexos também estejam identificados e numerados. Apresentar as
respostas na mesma ordem em que os exercícios foram propostos.
• Entregar ao final da aula do Lab. ou via TelEduc (dependendo da definição) todo o material
em formato pdf.
Parte prática
PARTE-1
Nos programas a seguir, o prefixo 0x (zero x) é utilizado para representação de um número
hexadecimal (o que de fato ocorre na linguagem Assembly do MCF52221). Por exemplo,
0x0101FEFE é a representação de 0101FEFE em hexadecimal (e corresponde à 16908030 na
representação decimal). Definições no Chapter 2 Addressing Capabilities da referência [CFPRM].
A seguir, considere o seu RA: abcdef (minúsculas), onde, a posição de cada letra corresponde ao
respectivo dígito de seu RA, como exemplo, caso seu RA seja 089123, o endereço 0xFF11abcf será:
0xFF110893.
Programa-1
(Considere o registrador de endereço A1 inicialmente com o valor: A1=0x2000abcd)
Monte este programa, veja o código fonte e execute passo a passo para responder aos quesitos do
Relatório do Lab. 2.
MOVE #0xFFFFFFFF,D1
MOVE.L D1,0x200001ef // por quê necessitamos de 2 instruções para mover
// para 0x200001ef ?
MOVE.W A1,0x200001ef
MOVE 0x200001ef,D0
OR #0x00001111,D0
MOVE #0x000Fdcba,A1 // por quê não necessitamos de MOVEA aqui ?
SUB A1,D0
AND #0x10101010,D0
Programa-2
Monte este programa e anote a sua tradução para o Assembly. Veja a folha de questões do Relatório
do Lab. 2.
MOVE #0x2000abef,A0
ADDI #0x201010ab,D0
MOVE 0x20100acf,D7
OR #0x00001ea1,D2
MOVE #0xacfe0000,A1
SUB A1,D1
AND #0x01010101,D0
Programa-3
Monte este programa e anote a sua tradução para o Assembly. Veja a folha de questões do Relatório
do Lab. 2.
MOVE #0x00000001,D0
LOOP: MOVE D0,D1
ADDI #0x00000001,D0
CMPI #0x000000Df , D1 ; f é o último dígito de seu RA
BNE LOOP
FIM: RTS
PARTE-2
Seja o Programa-4 que calcula o MDC (Programa-4: MDC/main.c)
Nota: Existem três formas de calcular o MDC: 1) por divisões sucessivas; 2) pela multiplicação dos
fatores comuns e 3) por subtrações e comparações sucessivas. Busque a definição de Máximo
Divisor Comum . Neste programa estamos usando a forma (3).
IMPORTANTE: Considere o RA: abcdef, onde, cada letra corresponde ao respectivo dígito do seu
RA.
Monte e entenda o Programa-4. Operando com o CodeWarrior, mude o conteúdo da posição de
memória 0x2000010c e do registrador D3. Então execute o programa passo-a-passo (Debug Mode "F11"), observando os valores do registrador utilizado e da posição de memória modificada
anteriormente.
Veja a folha de questões do Relatório do Lab. 2.
Programa-4: MDC/main.c
int main(void)
{
asm
{
//ALGORITMO DO MAXIMO DIVISOR COMUM (MDC)
move #0x0000001e, D3 //Armazena o operando 0x0000001e em D3
move #0x2000010c, A4 //A4 aponta para o primeiro endereço de memória
move #0x2000018d, A6 //A6 aponta para outro endereço de memória
//(A4) = x
// D3 = y >> inicializar D3 com algum valor
//(A6) = z = MDC
INI:
cmp.l (A4), D3
//Compara o x e y
beq FIM
//Se x e y são iguais, encontrou MDC (Branch
//FIM)
bgt OP2
//Se x<y, realiza operação 2
//Se x>y, realiza operação 1
OP1: sub D3, (A4)
//x = x - y
bra INI
//Volta para INI
OP2: sub (A4), D3
//y = y - x
bra INI
//Volta para INI
FIM:
move (A4), (A6)
//z = x = MDC
}
}
Referências - todas podem ser obtidas na página de apoio a esta disciplina:
http://www.dca.fee.unicamp.br/~leopini/DISCIPLINAS/EA871/2013-1/WebEA87112013.html#matcon
•
•
•
•
[MCF52223RM] - MCF52223 ColdFire® Integrated Microcontroller Reference Manual.
[CFPRM] - ColdFire Family Programmer's Reference Manual.
[RefRapidaMCF] - Referência rápida para o MCF52223.
[Daltrini] - Beatriz M. Daltrini, Mario Jino, Léo P. Magalhães; Introdução a Sistemas de
Computação Digital; Makron Books do Brasil Editora Ltda; ISBN 85-346-0986-1