Assembly 8051
Num sistema microprocessado, geralmente, não existe um sistema operacional; O programa desenvolvido pelo programador deve cuidar tanto da lógica do programa, bem como da configuração e acesso ao hardware e do gerenciamento de memória; Geralmente existe limitação de espaço de memória;
Linguagem Assembly
A Linguagem Assembly É a codificação dos códigos de máquina para uma linguagem mais próxima da linguagem entendida pelo ser humano; As instruções do processador são codificadas em mnemônicos para facilitar a identificação de sua funcionalidade; A tradução da linguagem assembly para os códigos de máquina do processador é feita através de um programa chamado assembler (ou montador)
A Linguagem Assembly É totalmente atrelada ao processador, ou seja, cada processador possui a sua própria linguagem;
Linguagem Assembly do uc 8051
As instruções do 8051 podem ser classificadas em 5 tipos diferentes: Transferência de dados; Aritméticas; Lógicas; Booleanas; Desvio;
Modos de Endereçamento Define o modo como os dados são acessados; O 8051 possui 5 modos de endereçamento: Endereçamento direto; Endereçamento indireto; Endereçamento via registrador; Endereçamento por constante imediata; Endereçamento indexado;
Modos de Endereçamento Endereçamento imediato: o dado é especificado na própria instrução: mov A, #31 ; carrega o valor 31 no acumulador O operando é identificado pelo símbolo #; Acumulador 31
Modos de Endereçamento Endereçamento direto: o endereço do dado é especificado diretamente na instrução: mov A, 31 29 30 31 32 Memória 98 73 1 128 ; carrega o conteúdo do endereço 31 no acumulador Acumulador 1
Modos de Endereçamento Endereçamento indireto: o dado é acessado através do endereço contido nos registradores R0 ou R1. Quando o conteúdo do registrador é um endereço, este registrador é precedido pelo símbolo @; Neste caso, os registradores R0 e R1 atuam como ponteiros para o dado
Modos de Endereçamento mov A, @R0 ; carrega o conteúdo da posição ; de memória indicada no ; registrador R1 no acumulador R0 Memória Acumulador 31 29 98 1 30 73 31 1 32 128
Modos de Endereçamento Endereçamento indexado: o dado é acessado através do endereço contido no registrador DPTR. movc A, @A+DPTR movx A, @DPTR ; carrega o conteúdo da ; posição de memória de ; programa indicada no ; registrador DPTR no acumulador ; carrega o conteúdo da posição ; de memória RAM externa indicada ;no registrador DPTR no acumulador Neste caso, o registrador DPTR atua como ponteiro para o dado
Modos de Endereçamento movx A, @DPTR ; carrega o conteúdo da posição ; de memória RAM externa indicada ;no registrador DPTR no acumulador DPTR Memória Acumulador 1A31 1A29 98 1 1A30 73 1A31 1 1A32 128
Modos de Endereçamento Endereçamento via Registrador: o dado é acessado através dos registradores R0 a R7. mov A, R5 ; carrega o conteúdo do ;registrador R5 no acumulador R7 R6 R5 Banco de Registradores 98 73 1... Acumulador 1 R0 128
Funcionamento da PILHA A pilha é uma estrutura de armazenamento de dados em que cada novo dado é colocado sempre no topo da pilha; O registrador stack-pointer (SP) aponta para o topo da pilha; A cada novo dado colocado na pilha, o registrador SP é incrementado, para apontar o topo da pilha; A cada dado retirado da pilha, o registrador SP é decrementado.
Funcionamento da PILHA As instruções PUSH e POP inserem e retiram respectivamente os dados da pilha; Nos microprocessadores, a pilha é usada principalmente para guardar o estado do processador na chamada de sub-rotinas e interrupções;
Funcionamento da PILHA Estado atual da pilha R0 A SP Memória 1Ah 33h 32h 2Fh 31h 30h 30h Dado 1
Funcionamento da PILHA Executando uma instrução push ACC Passo 1: o registrador SP é incrementado, apontando para a próxima posição de memória: R0 A SP Memória 1Ah 33h 32h 2Fh 31h 31h 30h Dado 1
Funcionamento da PILHA Executando uma instrução push ACC Passo 2: o conteúdo do acumulador é copiado para a posição apontada pelo registrador SP: R0 A SP Memória 1Ah 33h 32h 2Fh 31h 2Fh 31h 30h Dado 1
Funcionamento da PILHA Executando uma instrução push R0 Passo 1: o registrador SP é incrementado, apontando para a próxima posição de memória: R0 A SP Memória 1Ah 33h 32h 2Fh 31h 2Fh 32h 30h Dado 1
Funcionamento da PILHA Executando uma instrução push R0 Passo 2: o conteúdo do registrador R0 é copiado para a posição apontada pelo registrador SP: R0 A SP Memória 1Ah 33h 2Fh 32h 1Ah 31h 2Fh 32h 30h Dado 1
Funcionamento da PILHA Novo estado da pilha: R0 A SP Memória 1Ah 33h 2Fh 32h 1Ah 31h 2Fh 32h 30h Dado 1
Funcionamento da PILHA Executando uma instrução pop R0 Passo 1: o conteúdo da posição apontada pelo registrador SP é copiado para o registrador R0: R0 A SP Memória 1Ah 33h 2Fh 32h 1Ah 31h 2Fh 32h 30h Dado 1
Funcionamento da PILHA Executando uma instrução pop ACC Passo 2: o conteúdo da posição de memória apontada pelo registrador SP é copiado para o acumulador: R0 A SP Memória 1Ah 33h 32h 2Fh 31h 2Fh 31h 30h Dado 1
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Um programa em linguagem assembly possui os seguintes elementos básicos: Instruções: são os mnemônicos das instruções do processador; Operandos: são as informações referentes aos dados processados pelas instruções; Pseudo-instruções: são declarações inseridas no código fonte para orientar o montador;
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Definições: são declarações que atribuem um nome a algumas constantes, tornando mais fácil a referềncia no resto do programa; Rótulos (labels): são nomes atribuídos à endereços no programa; Comentários: informações colocadas pelo programador para documentar o programa. É qualquer texto colocado após um sinal de ponto-e-vírgula;
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) A formatação de um programa em assembly é bastante rígida; Cada linha do programa contém uma informação para o montador;
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) A estrutura da linha é a seguinte: Os rótulos são colocados próximos a margem esquerda da linha. Podem vir seguidos do sinal : (dois pontos); Seguindo o rótulo, está o mnemônico da instrução e os operandos; Após os operandos estão os comentários;
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Exemplo: inicio: mov SP, #30h ; inicializa a pilha mov A, #45 ; atribui o valor inicial ; ao acumulador
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Estruturas básicas de um programa em assembly: Subrotinas: uma porção de código executada várias vezes no programa. São chamadas por instruções no programa e causam um desvio da sequência normal de execução do programa; Interrupções: causam o desvio do fluxo normal de execução do programa devido a um evento de hardware. São como as subrotinas, mas não são causadas por instruções do processador, mas sim por eventos de hardware.
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Estruturas básicas de um programa em assembly: Decisões: são estruturas de programação que permitem desviar o fluxo de execução de um programa conforme o estado de determinadas condições. Estas condições são verificadas pelos flags; Repetições: são estruturas de programação que permitem executar um pedaço de código várias vezes;
Estrutura Básica de um programa em Linguagem Assembly (para o uc 8051) Estruturas básicas de um programa em assembly: Pseudo-instruções: ORG: definem um endereço de memória, onde a instrução da linha seguinte será alocada; END: indica o fim de um programa; EQU: Atribuem um valor a um rótulo. São usados para definir constantes; DB, DW: definem (reservam) espaços de memória para alocar dados. São usados para definir variáveis;