Você está na página 1de 30

Conjunto de Instruções do 8051

• Como localizar os dados processados durante a


execução das instruções?
O 8051 disponibliza 8 modos de endereçamento que
permitem especificar a origem ou o destino dos dados:
1. Endereçamento por Registo
2. Endereçamento Directo
3. Endereçamento Indirecto
4. Endereçamento Imediato
5. Endereçamento Relativo
6. Endereçamento Absoluto
7. Endereçamento Longo
8. Endereçamento Indexado
Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Conjunto de Instruções do 8051
• Endereçamento por Registo

• Os 3 bits menos significativos do opcode das instruções são usadas para


especificar um dos 8 registo R0 – R7

• Por exemplo para ADD A, R7 :

Opcode: 00101 111B

Instrução Registo

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento por Registo

• Existem 4 bancos de
registos, estando apenas um
activo num dado instante
• Os bits 3 e 4 (RS0 e RS1)
do registo PSW especificam
qual o banco que está activo

• MOV PSW, #000 11 000B


activa o banco 3

• Os bancos de registo
ocupam os primeiros 32
bytes da RAM interna

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Directo
• Pode aceder qualquer variável ou registo da RAM interna

• A instrução tem 2-3 bytes de comprimento, tendo um dos bytes a


localização a ser usado

opcode 55H

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Imediato
• O operando fonte é uma
constante:
i. Constante numérica
ii. Variável simbólica
iii. Expressão aritmética
contendo apenas constantes,
símbolos e operadores
• # é o símbolo indicador do
operando imediato
• A constante tem o comprimento
de 8 bits, exceptuando a
inicialização do DPTR em que a
constante é de 16 bits (porquê?) :
MOV DPTR, #800H

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Indirecto
• Usado na manipulação sequencial de
localizações de memória, entradas
indexadas numa tabela na RAM,
cadeias de caractere

Símbolo indicador do
• Endereços dos operandos endereçamento indirecto
conhecidos apenas no instante
da execução

• Normalmente, os registos R0 e R1 são


usados como apontadores,
exceptuando alguns casos das
instruções MOVX onde é usado o
DPTR

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Indirecto
1110011 1

• MOV A, @R1
( R1 ) = 40H
40H
(40H) = 55H
(A) = 55H
? 55H
Opcode = 11100111B
?

• Zerar a RAM interna de [60H - 7FH]?

MOV R0, #60H ; carrega R0 com o endereço da 1ª posição


CICLO: MOV @R0, #0 ; escreve zero na posição actual
INC R0 ; salta para a próxima posição
CJNE R0, #80H, CICLO ; se não atingiu a última posição (7FH) continua
... ; caso contrário, acabou e abandona do ciclo

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Relativo

• Usado apenas com algumas


instruções de salto
salto para frente (no máximo 127
bytes)
• O offset é um valor com sinal de 8
bits ( [-128 a 127] )

• O offset é somado ao (PC) + 2


para formar o endereço da
próxima instrução a ser
executada
Salto para trás (no máximo 128
bytes)

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Absoluto

• Usado apenas com as instruções ACALL e AJMP

• Os 5 MSB do PC especificam uma das 32 páginas de código

• 11 bits de endereço destino formado pelos 3 MSBits do código da


operação (A10 –A8) mais o segundo byte da instrução (A7 – A0)
Permite saltos dentro da página corrente de 2K de memória de
código

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Absoluto
• AJMP 0f46H
(PC) = 0900H

PC
0 0 1 0
depois 0 0 0 0 1 1 1 1 0 1 0 1
do salto

PC antes
do salto

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Longo

• Usado apenas com as instruções LCALL e LJMP

• O endereço destino é de 16 bits, permitindo endereçar todo espaço


memória de código (64K)

• Instruções de 3 bytes de comprimento e dependentes da posição


Pg. 268: errado

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Endereçamento Indexado

• Usa o PC ou o DPTR como registo base e o acumulador como offset

• Ideal na implementação de tabelas de salto e de pesquisa


...
REL_PC: INC A 99H
MOVC A, @A + PC 88H

RET 77H
66H
DB 66H
22H
DB 77H
PC 83H
DB 88H 04H
..
DB 99H
Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Conjunto de Instruções do 8051
Toda a subrotina tem um nome
• Endereçamento Indexado dado por uma etiqueta e termina
com a execução da instrução RET

REL_PC: INC A
MOVC A, @A + PC
RET
DB 66H
DB 77H
DB 88H
(A) = 88H
? ...
DB 99H 99H

... 88H
Que alterações efectuaria ao
programa com a inserção da MOV A, #02H ? 77H

instrução MOV DPTR, 66H


#1234H entre as instruções LCALL REL_PC PC 22H
MOVC A, @A + PC e RET? ... 83H
04H
..

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
Deve-se somar ao acumulador o
• Endereçamento Indexado número de bytes que separa a
instrução MOVC A, @A +PC do
REL_PC: ADD A, #4 início da tabela
MOVC A, @A + PC
MOV DPTR, #1234H ...
99H
RET
88H
DB 66H 77H
DB 77H 66H
(A) = 88 22H
DB 88H
12
DB 99H
34
... PC 90H
MOV A, #02H 83H

LCALL REL_PC 04H


24H
...
..

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
JMP @A + DPTR
• Endereçamento Indexado Bytes: 1
Atenção:
o livro está errado
Cycles: 2
Encoding: 01110011
MOV A, #02H
Operation: (PC) ← (A) + (DPTR)
MOV DPTR, #JMP_TBL
JMP @A + DPTR ...

JMP_TBL: AJMP LABEL0 addr(AJMP_L1)

AJMP LABEL1 Opcode(AJMP_L1)


addr(AJMP_L0)
AJMP LABEL2
Opcode(AJMP_L0)
AJMP LABEL3
PC 73H
...
LABEL0: ...
MSB(JMP_TLB)
?
LSB(JMP_TLB)
LABEL1: ... DPTR
90H
LABEL2: ... 02H
LABEL3: ... 74H
..

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Tipos de instrução

O 8051 possui 5 grupos funcionais de instruções:

1. Instruções aritméticas

2. Instruções lógicas

3. Instruções de transferência de dados

4. Instruções para a manipulação de variáveis booleanas

5. Instruções de controlo de fluxo de execução

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Tipos de instrução

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções aritméticas

• A maioria é executada num único ciclo


máquina, exceptuando:
i. INC DPTR (2 ciclos)
ii. MUL AB (4 ciclos)
iii. DIV AB (4 ciclos)

• Ao usá-las deve-se prestar atenção à forma


como afectam/”são afectadas” as/pelas flags do
registo PSW

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções aritiméticas
• R7 = R7 – R6 SUBB A, Rn Deve ser
explicitamente
zerado caso for
MOV A, R7 Bytes: 1 desconhecido

CLR C Cycles: 1
SUBB A, R6 Encoding: 10011rrr
MOV R7, A Operation (A) ←(A) – (C) – (Rn)

• Decrementar DPTR
DEC DPL ; decrementa o LSB do DPTR

MOV R7, DPL ; guardada o resultado em R7

CJNE R7, #0FFH, SKIP ; verifica se houve underflow para FFH

DEC DPH ; caso contrário decrementa o MSB do DPTR

SKIP: ...

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções aritiméticas A aritmética de multiprecisão
recorre-se da propagação do “e vai”
resultante da operação byte a byte
• Soma de 2 BCDs de 4 dígitos
MSB(num1) em 40H e LSB(num1) em 41H
MSB(num2) em 42H e LSB(num2) em 43H
Resultado em 40H e 41H

MOV A, 43H ; coloca no acumulador o LSB(num1)

ADD A, 41H ; adicione ao acumulador o LSB(num2) ignorando o “e vai”

DA A ; soma de BCDs deve ser seguido do ajuste decimal (DA)

MOV 41H, A ; guarda em 41H o LSB(num1 + num2) ajustado

MOV A, 42H ; coloca no acumulador o MSB(num1)

ADDC A, 40H ; adicione ao acumulador o MSB(num2) com o “e vai”

DA A ; soma de BCDs deve ser seguido do ajuste decimal (DA)

MOV 40H, A ; guarda em 40H o MSB(num1 + num2) ajustado

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções lógicas

• Todas as instruções lógicas que usam o acumulador


são executados num único ciclo máquina

Os restantes são executados em 2 ciclos máquinas

• Todas as instruções lógicas podem manipular


directamente (endereçamento directo) qualquer byte
da memória interna

• As instruções e-lógico, ou-lógico, ou-exclusivo-lógico e


negação-lógica podem manipular tanto byte como bits

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções lógicas

• Converter binário em A para BCD


(A) < 10010

MOV B, #10 ; carregar B com o divisor da base decimal

DIV AB ; divide o número no acumulador por 10

SWAP A ; mover o dígito das dezenas para o nibble mais


; significativo do acumulador

ADD A, B ; adiciona ao valor no acumulador (digito das


; dezenas) o dígito das unidades

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções lógicas

• Inverter os bits do acumulador


Por exemplo: 11010010 para 01001011

MOV R7, #8 ; carregar R7 com o nº de iterações = nº de


; bits num byte

LOOP: RLC A ; move para o carry o MSbit do

; acumulador

XCH A, 0F0H ; troca (A) com (B)

RRC A ; move para o carry o LSbit do


; acumulador

XCH A, 0F0H ; troca (A) com (B)

DJNE R7, LOOP ; já rodou os 8 bits do acumulador?

XCH A, 0F0H ; se sim, coloca o resultado correcto no


;acumulador

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções de transferência de dados
• Toda a movimentação de dados no interior da
memória interna são executados em 1 ou 2 ciclos
máquina

• A movimentação de dados entre a memória interna e


externa realiza-se através do endereçamento indirecto

• Todas as movimentações que operam na memória


externa são executados em 2 ciclos máquina
Usam o acumulador como fonte ou destino

• O strobe de leitura/escrita (/RD e /WD) são activados


apenas durante a execução da instrução MOVX
Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Conjunto de Instruções do 8051
• Instruções de transferência de dados
• Movimentação de dados a partir da memória externa
Fonte de dados: endereços 10F4H e 10F5H (memória externa)
Destino dos dados: registos R6 e R7, respectivamente.

MOV DPTR, #10F4H ; inicializa o apontador de dados de 16 bit com


; o menor endereço fonte

MOVX A, @DPTR ; lê o dado apontado pelo apontador de dados de


; 16 bits e coloca-o no acumulador

MOV R6, A ; transfere o dado lido do acumulador para R6

INC DPTR ; aponta para o próximo endereço fonte (10F5H)

MOVX A, @DPTR ; lê o dado apontado pelo apontador de dados de


; 16 bits e coloca-o no acumulador

MOV R7, A ; transfere o 2º dado lido do acumulador para R7

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções de transferência de dados
• Subrotina para o cálculo do quadrado
Dado de entrada: acumulador com 0 ≤ número ≤ 9
Resultado: no acumulador.

{
SQUARE: INC A
Solução 1 :
uso da tabela MOVC A, @A + PC
de pesquisa RET
TABLE: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 ; tabela de pesquisa com os
; quadrados de 0 - 9

{
SQUARE: PUSH 0F0H ; guarda na pilha (B)
Solução 2 : MOV 0F0H, A ; coloca em B o (A)
uso da
instrução
MUL AB ; multiplica o número por ele próprio
MUL POP 0F0H ; recupere o valor inicial de B
RET ; retorna para o chamante

...
Sequência
de chamada { MOV
CALL
...
A, #6
SQUARE
Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)
Conjunto de Instruções do 8051
• Instruções lógicas
• Tanto a RAM interna como o espaço SFR suportam
individualmente 128 posições endereçáveis a bit
Todos os acessos usam endereçamento directo, com os seguintes
endereços 00H – 7FH e 80H – FFH, nos 128 da RAM interna e espaço
SFR, respectivamente

Todos os portos são endereçáveis ao


bit. Por exemplo:
SETB P1.7
CLR P1.7
MOV P1.0, C

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções lógicas
• Implementação de um AND-lógico
Dados de entrada: pino 0 e 1 do porto 1
Resultado: pino 2 do porto 1

LOOP: MOV C, P1.0 ; colocar no bit carry o estado do pino 0

ANL C, P1.1 ; efectuar o AND-lógico do (C) com o estado do


; pino 1

MOV P1.2, C ; actualizar o estado do pino 2 com o resultado


; do AND-lógico presente no bit carry

SJMP LOOP ; volta ao início e repete tudo de novo

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções de controlo do fluxo de execução
• Existem várias instruções de controlo de fluxo e estas
podem ser categorizadas em:

• Chamadas e retornos de subrotina

• Saltos condicionais e incondicionais

• Ao nível da programação, especifica-se o endereço


destino de duas formas:

• Como uma etiqueta ou

• Como uma constante de 16 bits

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)


Conjunto de Instruções do 8051
• Instruções de controlo do fluxo de execução
• Contagem de automóveis
Dados de entrada: pino 0 do porto 1 ligado a um sensor
o sensor envia um pulso sempre um automóvel passa por cima
da faixa da estrada (isto é, o automóvel passa por cima do
sensor)
A contagem nunca atinge 255
Resultado: no acumulador

MOV A, #0 ; inicialmente o contador é “zerado”

LOOP: JNB P1.0, $ ; aguarde a passagem de um automóvel

JB P1.0, $ ; estando o carro sobre a faixa (sensor), aguarde


; até ultrapassar complemente a faixa

INC A ; o carro passou completamente pelo que


; actualiza-se agora o contador
Símbolo assembler que representa o
endereço da instrução actualmente SJMP LOOP ; volta ao início e aguarde a passagem de mais
; carros
em execução

Microprocessadores Profs. Adriano Tavares/Carlos Silva (DEI-Universidade do Minho)

Você também pode gostar