Você está na página 1de 46

Instruções Assembly

Microcontrolador 8051
Instruções
• A instrução pode ser definida como sendo uma “ordem dada para
executar uma certa tarefa”.

• No microprocessador essas tarefas podem ser :


– - ler ou escrever numa posição de memória;
– - fazer uma operação aritmética e lógica;
– - fazer qualquer outra manipulação de dados, etc.

• A instrução para um microprocessador pode ser representada por


linguagem de máquina, códigos em hexadecimal ou binário.
Instruções
• Outra maneira de representação pode ser feita através dos
mnemônicos (códigos que representam uma seqüência de
palavras) de um programa fonte, que serão transformados em
linguagem de máquina (ou linguagem objeto) por um programa
compilador (tradutor).

LINGUAGEM ASSEMBLY
• A linguagem ASSEMBLY foi a primeira linguagem que surgiu nesta
área de computação, sendo formada por mnemônicos.
Instruções
• Cada mnemônico possui o um código correspondente em
hexadecimal, e cada ‘família’ de microcontrolador possui um
conjunto de mnemônicos diferente.

• No caso do 8051, a linguagem assembly precisa somente de 42


mnemônicos para especificar as 33 funções disponíveis.

• Cada função poderá ter associada a diversos mnemônicos como


no exemplo: MOV, MOVX, MOVC.
Instruções

• Quando os mnemônicos são combinados com os endereços dos


operandos através dos campos destino e fonte, no total há cerca
de 111 instruções.

• A linguagem assembly tem como finalidade facilitar o manuseio


das instruções para desenvolver programas
Instruções

• Todo microcontrolador precisa de um lista de instruções para ser


seguida passo-a-passo, lista essa chamada de programa, que diz
exatamente o que o microcontrolador deve fazer.

• O microcontrolador só faz duas coisas: lê e processa números


binários.
Instruções
• Cada fabricante de microcontrolador define os mnemônicos para
os seus produtos

• A linguagem assembly é classificada de baixo nível , porque na


elaboração do programa há a necessidade de elaborar rotinas
para o completo controle da CPU.

ASSEMBLER:
• O tradutor assembler é um programa de computador que produz
um código binário correspondente a cada mnemônico.
Instruções
• Os programas de tradução avisam quando encontram algum erro
no programa fonte (programa elaborado para a CPU)

ESTRUTURA DA LINGUAGEM ASSEMBLY

• A linguagem ASSEMBLY é dividida em grupos , e nessa ordem:

INICIO:mov A, #0FFh; move o dado


para A
Instruções
LABEL
• A principal característica da linguagem ASSEMBLY é o uso de
label.

• O label torna a programação em ASSEMBLY mais rápida e segura,


porque ao invés de lidar com um endereço absoluto, lida-se com
um conjunto de caracteres (label).
Instruções
• Este artifício é útil para se seguir o fluxo de dados, e também
quando se acrescenta ou se retira alguma instrução, pois o novo
endereço do label é automaticamente corrigido pelo programa
compilador Assembler.

• O primeiro caracter do label deve ser sempre uma letra, isto é,


ele não pode começar com um número
Instruções
CÓDIGO DE OPERAÇÃO

• É simplesmente a instrução em si.

• No código aparecerá apenas o conjunto de caracteres, que


representará o tipo de instrução, tal como soma, carregamento,
teste, entre outras.
Instruções
• COMENTÁRIO

• É considerado muito importante num programa.

• Os comentários facilitam a visualização do fluxo do programa.

• O comentário deve, na maioria das vezes, dizer para que se


destina a instrução, e não simplesmente descrevê-la.
Instruções
Estrutura de programa assembly

• Um programa assembly é tipicamente composto por pelo menos


dois segmentos:

– um segmento de dados que define o espaço associado ao armazenamento


das variáveis e constantes usadas pelo programa;

– um segmento de instruções, onde o código do programa é armazenado.


Instruções
• Além dessas duas seções, um programa-fonte assembly pode
conter uma seção de definições, usadas na descrição dos
programas e que não produzem nenhum efeito no código gerado.

• Por conveniência da leitura do código fonte, a seção de definições


é tradicionalmente alocada ao início do código.

• Assim, quando o código for lido por um ser humano ele terá
noção do significado das constantes simbólicas usadas ao longo
do programa.
Instruções
• .
Instruções
PSEUDO-INSTRUÇÃO

• É um termo usado em linguagem ASSEMBLY, também chamado


de “Instrução Especial”.

• Pode ser empregada na definição de label, definição de nome de


programa, definição de ‘string’(palavra), definição do endereço
inicial do programa, reserva de área de memória e definição de
byte.
Instruções

• Os números em hexadecimal deverão ter a letra “H” no final;

• Os números em binário deverão ter a letra “B”;

• Os números em octal deverão ter as letras “O” ou “Q”

• Os números em decimal deverão ter a letra “D” ou somente o


próprio número.
Instruções
TITTLE (nome do programa)
• Esta pseudo-instrução serve para nomear um programa e,
quando este programa for impresso, esta pseudo-instrução
aparecerá em todas as folhas.

END
• Esta pseudo-instrução é usada para indicar o fim de um
programa.
Instruções
ORG (endereço)
• Esta pseudo-instrução é usada para definir uma posição de
memória de onde o programa deve começar , ou seja, carrega o
PC (Program Counter) com o endereço definido
– Exemplo:
– ORG 08H

EQU
• Esta pseudo-instrução é usada para definir um label, (NOME EQU
NN). Associa um valor definido pelo programador a um símbolo.
– Exemplos:
– VAR_82H EQU 82H
Tipos de Instruções

• Aritméticas
• Lógicas
• Transferência de dados
• Booleanas
• Desvio
Instruções Aritméticas
Instruções Aritméticas
Exemplos

• INC REG - Incrementa conteúdo do registrador “reg”. Por


exemplo, se R1 = 05H, então inc R1 resulta em R1 = 06 H.

• DEC REG - Decrementa conteúdo do registrador “reg”. Por


exemplo, se R2 = 0B H, então dec R2 resulta em R2 = 0A H.
Exemplos
• ADD A, REG - Adiciona o conteúdo do registrador “reg” ao
conteúdo do acumulador: A = A + reg Exemplo: add a,R1 Se a =
07 H e R1 = 03 H, então, após a instrução, a = 0AH.

• SUBB A, BYTE - Subtrai o conteúdo do acumulador do “byte”. A =


A – byte.
Exemplo: subb a,#05H Se a = 07 H, então, após a instrução, a = 02
H
Exemplos
• MUL AB – Multiplica o conteúdo de A pelo conteúdo de B. O
resultado está em B A. O resultado da multiplicação é um número
de 16 bits, por isso precisa de dois registradores para o resultado.

• Exemplo:
• MUL AB - se A = 25 H e B = 30 H, após a instrução, tem-se: B = 06
H e A = F0 H, pois o resultado da multiplicação é: 6F0 H
Exemplos
• DIV AB - Divide o conteúdo de A pelo conteúdo de B. A recebe o
quociente e B o resto.

• Exemplo:

• DIV AB - se A = CA H (202) e B = 19 H (25), após a instrução, tem-


se: A = 08 H e B = 02, pois a divisão em decimal é: 202/25, que dá
8 e resta 2.
Instruções Lógicas
Instruções Lógicas
Exemplos
• SWAP A - Faz a troca dos nibbles do acumulador, ou seja, o nibble
mais significativo passa a ocupar o quatro primeiros bits do
acumulador e o nibble menos significativo passa a ocupar os
quatro últimos bits. Por exemplo, se originalmente, A = 35 H,
após a instrução, A = 53 H.

• CPL A - Complementa o conteúdo do acumulador. Por exemplo,


se originalmente, A = 55 H, então, após a instrução, A = AA H.
Exemplos
• anl a,byte - Faz uma operação AND entre acumulador e BYTE.

• Exemplo:

• anl a,#0FH se originalmente a = 35 H, após a instrução torna-se:


• A = 05H.
Exemplos
• orl A,byte - Faz uma operação OR entre o acumulador e byte.

• Exemplo:

• orl a,#20H - se originalmente a = 07 H, após a instrução torna-se:


• A = 27 H.
Transferência de dados
Transferência de dados
Exemplos
• MOV R0,#20h – Carrega registrador R0 com valor 20h

• MOV @R0,#55h - Copia o valor 55h na posição pontada pelo


registrador R0. Se R0 = 20h, então copia valor 55h na posição
20h, ou seja, na primeira posição acima do banco de
registradores.

• MOV DPTR,#200h - Carrega registrador de 16 bits “dptr” com


valor 200h.

• MOVC A,@A+DPTR - Carrega acumulador com o conteúdo da


posição apontada por “a+dptr”.
Instruções Boolenas
Exemplos
• setb bit - Seta o “bit”.

• Exemplo: setb ligado. Torna o bit ligado igual a 1.

• clr bit – Limpa o “bit”

• Exemplo: clr ligado. Torna o bit ligado igual a zero.


Instruções de Desvio
Instruções de Desvio
Exemplos
• jb bit,desvio - Desvia para a posição “desvio”, caso o “bit” esteja
setado.
• Exemplo: jb ligado,desliga Se ligado = 1, então o programa desvia
para a posição “desliga”.

• jnb bit,desvio - Desvia para “desvio”, caso o “bit” NÃO esteja


setado.
• Exemplo: jnb ligado,liga Se ligado = 0, então o programa desvia
para a posição “liga”.
Exemplos
• jc desvio - Desvio condicional para a posição indicada por
“desvio”.
• Desvia se a flag de CARRY estiver setada.

• jnc desvio - Desvio condicional para a posição indicada por


“desvio”.
• Desvia se a flag de CARRY não estiver setada.
Exemplos
• djnz reg,desvio - Decrementa registrador “reg” e pula para a
posição “desvio” se o resultado não for zero.

• cjne a,#dado,desvio - Compara conteúdo do acumulador com o


dado e desvie para desvio se for diferente “.
Instruções
• .
Modos de Endereçamento
• Direto: o dado do operando indica o endereço de transferência do dado.
• Ex: MOV A,50H ; o dado do endereço 50H da RAM interna do 8051 é transferido para o
acumulador

• Registrador: o dado do operando Rn é transferido para o destino.


• Ex: MOV A,R6 ; o dado do registrador R6 é transferido para o acumulador

• Imediato (#dado): o dado seguido de # é transferido para o destino


• Ex.: MOV R1,#70H

• Indireto (@Rn): o dado armazenado no endereço da memória com endereço guardado no


registrado Rn é transferido para o destino
• Ex.: MOV R0,#50H ; o dado 50H é carregado em R0
• MOV A,@R0 ; o dado do endereço 50H é carregado no acumulador.
Exercícios
• 1)Mova para o registrador R0 o valor 25 em decimal (19h). Depois
some com o conteúdo do Acumulador. O resultado fica no
Acumulador
• 2) Mova para o registrador P3 o valor 25 em hexadecimal. Depois
some com o conteúdo do Acumulador.
• 3)Mova para o registrador interno de endereço 30h o valor 10 em
hexadecimal. Depois some com o conteúdo do Acumulador
• 4) Carregue no acumulador o conteúdo 40h através de um
endereçamento indireto utilizando o Registrador R0
Exercícios
• 5) Mova o conteúdo do registrador R0 para a posição de memória
20h pelo endereço de R0

• 6) Qual a diferença entre as instruções:


– mov A, #20
– mov A, #20h
– mov A, 100000b
Bibliografia
• GIMENEZ, S. P. Microcontroladores: 8051. São Paulo: Pearson
Education, 2002.
• STALLINGS, W. Arquitetura e organização de computadores. 5. ed.
São Paulo: Prentice Hall, 2002.
• HENNESSY, J. L.; PATTERSON, D. A. Arquitetura de computadores:
uma abordagem quantitativa. Rio de Janeiro: Campus, 2003.
• NICOLOSI, D. E. C., Microcontrolador 8051 detalhado, 5. ed. São
Paulo: Érica, 2004.
• MARINHO, J. E. S. e Marinho, E. S. Mini curso de
Microcontrolador. Revista saber eletrônica Especial nº2 /Jan 2001

Você também pode gostar