O 8051 possui uma arquitetura bastante peculiar, diferente de outros microcontroladores de 8 bits como PIC e AVR.
Arquitetura do AT89S51 (fonte: datasheet) As partes destacas são as que vou comentar |
As instruções do assembly do 8051 referenciam diversos registradores (de 8 bits, exceto pelo PC):
- PC - program counter, aponta para a próxima instrução a executar. Tem 16 bits, possibilitando até 64K de memória de programa.
- SP - stack pointer, usado pelas instruções de chamada e retorno de subrotina. A pilha cresce na direção dos endereços maiores.
- PSW - program status word, possui os flags (carry, carry auxiliar, overflow e paridade) e um bit para selecionar o conjunto de registradores de uso geral (ver abaixo)
- ACC - acumulador, usado como operando em várias instruções
- B - extensão do acumulador para as operações de multiplicação e divisão
- R0 a R7 - registradores de uso geral. O 8051 possui quatro conjuntos destas registradores, dois bits no PSW selecionam qual é usado.
Entretanto, apenas o PC da lista acima é um registrador típico. Todos os demais podem ser acessados por instruções de acesso de memória:
- SP: 0x81
- PSW: 0xD0
- ACC: 0xE0
- B: 0xF0
- R0 a R7: 0x00 a 0x07 (conjunto 0), 0x08 a 0x0F (conjunto 1), 0x10 a 0x17 (conjunto 2), 0x18 a 0x1F (conjunto 3)
- Imediato: o operando está na instrução (na Flash)
- Direto: a instrução contém um endereço de 8 bits. Os endereços 0x00 a 0x7F correspondem a posições da IRAM (Internal Ram). Os endereços 0x80 a 0xFF correspondem aos registradores especiais (SFR - Special Function Registers)
- Indireto na IRAM: o endereço (de 8 bits) do operando está no registrador R0 ou R1. Esse acesso indireto acessa somente a IRam, se ela tiver 256 bytes é a forma de acessar os 128 bytes nos endereços mais altos.
- Indireto na XRAM (eXternal Ram): a arquitetura permite mais 64K de RAM com endereçamento separado dos demais. O acesso à XRAM é sempre indireto, usando um ponteiro armazenado no registrador DPTR. O registrador DPTR é composto pelos SFRs de endereço 0x82 (low) e 0x83 (high). Somente a instrução MOVX acessa a XRAM.
- Indireto na PMEM (Program Memory). Também usa o DPTR, somente a instrução MOVC pode acessar a memória de programa.
Três quartos das instruções são ditas "regulares", por seguirem a mesma regra de formação onde os 4 bits mais significativos determinam a operação e doze combinações dos 4 bits menos significativos indicam o operando:
As instruções com códigos X0 a X3 são ditas "irregulares":
Fonte: Wikipedia |
Por último, os códigos D6 e D7 corresponde à instrução XCHD A,@Ri.
Existem vários aspectos curiosos com relação ao conjunto de instruções e seus operandos:
- A maioria das instruções de desvio são relativas: o operando é um número de 8 bits com sinal (-128 a +127) que é somado ao PC para efetuar o desvio
- AJMP e ACALL utilizam um endereço de 11 bits, onde os 3 bits mais significativos são codificados no opcode. Isto permite gerar um código compacto para os endereços nos primeiros 2K da memória de programa.
- As instruções de manipulação de bit usam um endereço de 8 bits para endereçar um bit de uma posição da Ram de 0x20 a 0x2F (na Ram) ou de um dos registradores nos endereços 0x80, 0x88, 0x90, ..., 0xF8.
Nenhum comentário:
Postar um comentário