Intel 8086 versus AVR AT90S2313:
modos de endereçamento

Prof. Célio Guimarães
Atualizado em: 14/09/2004  

Este documento procura mostrar semelhanças e diferenças entre os modos de endereçamento do Intel 8086 e do microcontrolador AVR 90S2313 da Atmel, de forma a facilitar a transição da programação em linguagenm de montagem do 8086 para o AVR 90S2313.
Uma boa introdução à arquitetura do AVR 90S2313 encontra-se na seção "Architectural Overview" do datasheet manual, pgs 5 - 18. Leia-a antes de qualquer outra coisa.

Por ter uma arquitetura RISC todas as instruções do AVR 90S2313 possuem o mesmo tamanho, 16 bits, com exceção das instruções de endereçamento direto, LDS e STS que ocupam 32 bits. Um ponto importante a lembrar é que a arquitetura dita Harvard dos microcontroladores AVR possui internamente barramentos separados para instruções (16 bits) e para dados (8 bits). Estes espaços distintos de endereçamento são chamados de área de programa (read only) e área de dados (read/write). Uma instrução especial (LPM) permite ler dados (constantes) armazenados na área de programa.

As primeiras 32 posições de memória RAM funcionam como registradores de propósito geral, denotados R0 a R31. A notação Rr refere-se a um deles como operando fonte de uma instrução e Rd como operando destino. Além disso os pares de registradores (R26, R27), (R28, R29) e (R30, R31) podem ser usados como apontadores de 16 bits e são chamados, respectivamente de X, Y e Z. Este recurso é inestimável para operar com vetores e na implementação do compilador C para a família AVR.
O registrador de estado (SREG), apontador para pilha (SP), e vários outros registradores para contrôle de E/S e de interrupções encontram-se nas 64 posições seguintes da memória RAM (endereços 0x20-0x5F), que são chamadas de espaço de E/S.
A memória RAM para dados (denominada SRAM - Static RAM) ocupa os 128 bytes subsequentes (endereços 0x60 a 0xDF no modelo AT90S2313).

1. Instruções de movimentação de dados

São semelhantes ao MOV do 8086, porém com vários (infelizmente) mnemônicos especializados:

  1. as instruções LD (LoaD) e LDD (Load with Displ) carregam num registrador um byte da memória SRAM apontado por um dos indexadores X, Y ou Z (coletivamente chamados W, a seguir);
  2. as instruções ST(STore) e STD (STore with Displ) armazenam um registrador (8 bits) no byte da memória SRAM apontado por um dos indexadores X, Y ou Z;
  3. os registradores X, Y e Z podem adicionalmente usar pós-decrementação (indicado por W+) ou pré-decrementação (indicado por -W).
  4. a notação a seguir: [W] (do NASM) indica que o operando é a posição de memória apontada por W. Observe que os manuais do AVR usam a notação: (W)
  5. LPM é a única instrução que permite ler (em R0) constantes armazenadas na área de programa (apontadas pelo registrador Z: como a área de programa é endereçada pela CPU a nivel de 16 bits, o endereço colocado em Z deve ser sempre: rótulo * 2).

InstruçãoEfeito
MOV Rd, Rr Rd := Rr
LD Rd, W Rd := [W]   Obs:  W = X, Y ou Z
LD Rd, W+ Rd := [W], W := W + 1
LD Rd, -W W := W - 1, Rd := [W],
ST W, Rr [W] := Rr
ST W+, Rr [W] := Rr, W := W + 1,
ST -W, Rr W := W - 1, [W] := Rr
LDD Rd, W+q Rd := [W + q] , 0 ≤ q ≤ 63
STD W+q, Rd [W + q] := Rd , 0 ≤ q ≤ 63
LDS Rd,end Rd := [end]   Endereçamento direto à RAM: end tem 16 bits (instrução: 32 bits)
STS end, Rd [end] := Rd   Endereçamento direto à RAM: end tem 16 bits (instrução: 32 bits)
LPM R0 := [Z]  byte apontado por Z na região de instruções

 

2. Instrução de comparação seguida de salto condicional

Admite tanto comparação de operandos de 8 bits com sinal como sem sinal. As instruções de salto condicional são mais restritas no AVR que no 8086, conforme mostra a tabela de equivalências abaixo (onde na significa não se aplica):

Comparação 8086 x AVR 90s2313
  com sinal sem sinal
operação 8086 AVR 8086 avr
= je (jz) breq je (jz) breq
!= jne (jnz) brne jne (jnz) brne
< jl brlt jb brlo
<= jle na jbe na
>= jge brge jae brsh
> jg na ja na

 

3. Operandos imediatos

4. Instruções de salto e chamada de subrotina

5. Programando em assembler no AVR AT90S2313

  1. Um resumo do conjunto de instruções do modelo AT90S2313 está no documento avr_instr_set.pdf, que é suficiente para fazer programas simples.
    O manual completo do conjunto de instruções (instruction set) detalha todas as instruções da família de microcontroladores AVR (alguns com capacidade de endereçamento de instruções e de dados bem maior que a do AVR AT90S2313). Algumas delas não estão disponiveis no AT90S2313.

  2. Diretivas e sintaxe da linguagem de montagem (assembler) encontram-se neste manual sucinto assembler user guide

  3. Para dominar os vários recursos de E/S e de interrupções do AT90S2313 V. deve consultar o manual do datasheet.

  4. O ambiente Windows de programação/simulação AVR Studio é livre e bastante simples de usar. Será detalhado em aula; no documento a seguir V. encontrará um manual sucinto de uso do AVR Studio. V. encontrará um arquivo de instalação aqui.

Hospedado na sourceforge.net existe um compilador C/C++ (avr-gcc) para a família AVR no ambiente Windows. Você pode baixar a partir deste link o programa de instalação do ambiente WinAVR.