MC404EF -2º Semestre 2012

Prof. Célio Guimarães - IC - sala 40

Atualizado em: 13/08/12

Atividade 1a (obrigatória): Programa que tira um "retrato de si mesmo"

Escreva e teste um programa que exibe na memória RAM suas próprias instruções no formato ascii-hexadecimal. V. deve converter as instruções do programa (que estão no espaço de endereçamento de instruções) para ascii-hexadecimal usando a memória SRAM para armazenar o programa convertido. Observe que cada instrução do programa (16 bits) gerará 4 bytes em ASCII. Veja no exemplo first.asm como ler bytes da memória de programa (a diferença agora é que você vai ler os bytes do próprio programa!).
Sugestão: escreva uma pequena subrotina para converter um inteiro de 4 bits em um caracter ascii-hexadecimal ('0'...'9', 'A'...'F'), lembrando que na tabela ASCII há 7 caracteres entre o '9' e o 'A'.

Verifique a correção do programa comparando visualmente o conteúdo final do vetor (selecione View → Memory Window 2 → Data) com o da janela de memória do programa (selecione View → Memory → Program) do simulador (ou com o do arquivo .lst gerado pelo montador o qual, no entanto, mostra os bytes no formato "liitle endian").

Desafio: se o seu programa ocupar menos de 256 bytes poderá executar até em pequenos microcontroladores AVR com apenas 256 bytes de memória RAM.

Atividade 1b (obrigatória) Produto escalar de dois vetores de inteiros de 8 bits sem sinal

Escreva um programa em linguagem de montagem do AVR que calcula o produto escalar de dois vetores de inteiros de 8 bits sem sinal, localizados na memória de programa. Cada vetor é delimitado pelo valor ff e que não faz parte do vetor. Você deve copiar para a memória RAM apenas o 1º vetor a fim de facilitar o cálculo. O produto escalar deve ser calculado com precisão de 16 bits (use a instrução MUL e as de soma com precisão de 16 bits) e no final do cálculo o produto escalar deve ser armazenado em dois bytes da memória RAM no formato little endian (ou seja, na ordem byte menos signif, byte mais signif). Faça um teste com dois vetores de 4 elementos cada com dígitos extraídos dos RGs ou CPFs das pessoas do seu grupo, considerados como dígitos hexadecimais. Obs: o resultado do produto escalar deve ser maior do que ff, a fim de testar que as somas sejam de precisão estendida. Verifique a correção com a calculadora do Windows.
Exemplo de declaração dos vetores:

Vetor1:   db 0x74, 0x55, 0x32,0x68, 0xff
Vetor2:   db 0x50, 0x46, 0x88,0x70, 0xff
e o resultado do produto escalar é: 0x838e