Prof. Célio Guimarães - IC - sala 40
Atualizado em: 13/08/12
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.
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