57
Microprocessadores são ‘Máquinas de Estado Seqüenciais Síncronas’ que operam mediante a execução de uma seqüência de códigos binários armazenados em memória. 1 Prof. Adilson Gonzaga

Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Microprocessadores são ‘Máquinas de Estado Seqüenciais Síncronas’ que operam mediante a execução de uma seqüência de códigos binários armazenados em memória.

1

Prof. Adilson Gonzaga

Page 2: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

• As ordens ou comandos compreendidos por um determinado Microprocessador, são INSTRUÇÕES seqüencialmente armazenadas na Memória.

• Ao conjunto de Instruções compreendidos por um determinado Microprocessador dá“INSTRUCTION SET”.

•que é em geral, diferente do INSTRUCTION SET de outro Microprocessador de fabricantes diferentes.

• Ao conjunto de Instruções compreendidos por um determinado Microprocessador dá-se o nome de “INSTRUCTION SET”.

• Cada Microprocessador tem seu próprio INSTRUCTION SET que é em geral, diferente do INSTRUCTION SET de outro Microprocessador de fabricantes diferentes.

2

Page 3: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

• Uma sequencia de Instruções do INSTRUCTION SET, armazenadas na memória e que realiza alguma operação, recebe o nome de PROGRAMA.

• Cada Instrução do Microprocessador é um código binário formada em geral por um ou mais Bytes.

•associado um Mnemônico para facilitar a compreensão da função que a Instrução executa.

•dá

• Cada Instrução do Microprocessador é um código binário formada em geral por um ou mais Bytes.

• A cada código binário equivalente a uma Instrução está associado um Mnemônico para facilitar a compreensão da função que a Instrução executa.

• Ao conjunto de Instruções e seus Mnemônicos equivalentes dá-se o nome de LINGUAGEM ASSEMBLY.

3

Page 4: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

4

• Para a documentação lógica de um Programa em Assembly utiliza

•INSTRUCTION SET do Microprocessador.

• Para a documentação lógica de um Programa em Assembly utiliza-se um Fluxograma ou Diagrama de Blocos.

• Cada bloco do Fluxograma equivale a um sub-conjunto do INSTRUCTION SET do Microprocessador.

• O Fluxograma é uma forma de se implementar logicamente um programa, antes que o mesmo seja codificado na Linguagem do Microprocessador.

• O Fluxograma é uma forma de se implementar logicamente um programa, antes que o mesmo seja codificado na Linguagem Assembly do Microprocessador.

Page 5: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

5

• Bloco de Processo

• Equivalem às Instruções que realizam alguma operação do tipo: - Movimento de Dados - Operação Aritmética - Operação Lógica

Execute

• Linhas de Fluxo do Programa • Mostram a sequencia de execução das Instruções.

• Cada Bloco do Fluxograma possui apenas uma linha de Fluxo de Entrada e uma ou duas de saída

Page 6: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

6

• Bloco de Decisão

X = 0?

V

F

• Equivale às Instruções que decidem sobre o Fluxo do Programa.

•for Verdadeira(V) o programa continua abaixo, se for Falsa(F) o programa muda o fluxo.

• Equivale às Instruções que decidem sobre o Fluxo do Programa.

• Se a função dentro do bloco for Verdadeira(V) o programa continua abaixo, se for Falsa(F) o programa muda o fluxo.

Page 7: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

7

• Processo Pré-definido

• Equivale às Instruções que mandam executar uma Sub rotina armazenada em outro lugar da Memória.

•termina, o fluxo continua normalmente.

• Equivale às Instruções que mandam executar uma Sub-rotina armazenada em outro lugar da Memória.

• Observe que quando a sub-rotina termina, o fluxo do programa continua normalmente.

Page 8: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

8

Início

FIM

• Bloco de Início de Programa • Bloco de Fim de Programa

• O Bloco de Início de Programa não equivale a uma Instrução específica do INSTRUCTION SET.

• O Bloco de Início de Programa não equivale a uma Instrução específica do INSTRUCTION SET.

• O Bloco de FIM equivale a uma instrução que termina o Programa. É chamado de FIM LÓGICO do Programa.

• O Bloco de FIM equivale a uma instrução que termina o Programa. É chamado de FIM LÓGICO do Programa.

Page 9: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

9

Início

Ler o dado da Memória

Dado = 0?

Parar

V

F

• O programa ao lado deve Ler um Dado da memória, verificar se é igual a zero. Se não for zero, continua em LOOP. Se for zero paro programa.

• O programa ao lado deve Ler um Dado da memória, verificar se é igual a zero. Se não for zero, continua em LOOP. Se for zero para o programa.

Page 10: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

10

• Para Codificar um Programa escrito através de um Fluxograma, deve-se escolher o Microprocessador, ou seja, conhecer seu Conjunto de Instruções.

• Os Microcontroladores da família MCS-51 serão os dispositivos a serem aplicados nesta disciplina.• Os Microcontroladores da família MCS-51 serão os dispositivos a serem aplicados nesta disciplina.

Page 11: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

11

Execute

• Instruções equivalentes ao Bloco de Processo

ADD A, Rn SUBB A, direct

• Instruções Aritméticas

INC A

DA A

DEC A

Page 12: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

12

• Instruções equivalentes ao Bloco de Processo

Execute

• Instruções Lógicas

ANL A, Rn ORL A, direct

XRL A, #data

CLR A CPL A

RL A SWAP A

Page 13: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

13

Execute

• Instruções equivalentes ao Bloco de Processo

• Instruções de Transferência de Dados

MOV A, Rn

MOVX A,@DPTR

MOVC A, @A+DPTR

PUSH direct POP direct

XCH A, Rn

Page 14: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

14

X = 0?

V

F

• Instruções equivalentes ao Bloco de Decisão

JZ rel JNZ rel

CJNE A, direct, rel

JC rel JNC rel

JB bit, rel JNB bit, rel

DJNZ Rn, rel

• Instruções de Desvio

Page 15: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

15

• Instruções equivalentes ao Bloco de Processo Pré-definido

LCALL addr16

• Instruções de Sub-Rotina

ACALL addr11

RET

RETI

Page 16: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

16

• Instruções equivalentes a Mudança de Fluxo

• Instruções de Saltos

LJMP addr16 AJMP addr11

SJMP rel

JMP @A+DPTR

Page 17: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

17

1. Endereçamento Imediato 1. Endereçamento Imediato

• Identificado através do sinal # • Identificado através do sinal #

• Opera sobre o dado localizado na própria instrução

• Exemplo: ADD A,#30h

O dado 30h é somado ao Registrador A

Page 18: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

18

ADD A,#30h

00

Registrador A

ADD A,#30h

Registrador A

30h 00 + 30h

1. Endereçamento Imediato 1. Endereçamento Imediato

Page 19: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

19

20

00

Memória Registrador A

ADD A,#30h

Programa

Registrador A

30

Operação

00 30 +

ADD A,#30h

30

Endereço

(hexa)

Conteúdo

(hexa)

1. Endereçamento Imediato 1. Endereçamento Imediato

Page 20: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

20

• Opera sobre o dado cujo endereço está na instrução • Opera sobre o dado cujo endereço está na instrução

• Exemplo: ADD A,30h

O dado armazenado no endereço 30h é somado ao Registrador A

2. Endereçamento Direto 2. Endereçamento Direto

Page 21: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

21

ADD A,30h

Registrador A

00

Conteúdo do Endereço 30h

20

ADD A,30h

20 00 + 20

Registrador A

2. Endereçamento Direto 2. Endereçamento Direto

Page 22: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

22

00

Memória Registrador A

ADD A,30h

Programa

Registrador A

20

Operação

00 20 +

ADD A,30h

20 30

Endereço

(hexa)

Conteúdo

(hexa)

2. Endereçamento Direto 2. Endereçamento Direto

Page 23: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

23

• Opera sobre o dado cujo endereço está armazenado em um Registrador apontado na instrução

• Exemplo: ADD A,@R0

• Identificado através do sinal @ • Identificado através do sinal @

O dado armazenado no endereço apontado pelo Registrador R0 é somado ao Registrador A

3. Endereçamento Indireto 3. Endereçamento Indireto

Page 24: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

24

ADD A,@R0

Registrador A

00

Conteúdo do Endereço 30h

20

ADD A,@R0

00 + 20

Registrador R0

30h

20

Registrador A

3. Endereçamento Indireto 3. Endereçamento Indireto

Page 25: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

25

00

Memória Registrador A

ADD A,@R0

Programa

Registrador A

20

Operação

00 20 +

ADD A,@R0

20 30

Endereço

(hexa)

Conteúdo

(hexa)

Registrador R0

30h

3. Endereçamento Indireto 3. Endereçamento Indireto

Page 26: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

26

Início

Ler o dado da Memória

Dado = 0?

Parar

V

F

ORG 0

LOOP:

MOV A,30H

CJNE A,#00,LOOP

AQUI: SJMP AQUI

Page 27: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

27

ORG 0

LOOP: MOV A,30H

CJNE A,#00,LOOP

AQUI: SJMP AQUI

Mnemônicos (Programa Assembly)

Código Compilado (Opcode)

COMPILADOR

Page 28: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

28

Memória de Programa

E5

30

B4

00

FB

80

00

01

02

03

04

05

Endereço Conteúdo

06 FE

Page 29: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo:

Campo do Rótulo (Label)Campo do Rótulo (Label)

29

Page 30: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo:

Campo da Operação (Mnemônicos)

Campo da Operação (Mnemônicos)

30

Page 31: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo:

Campo do OperandoCampo do Operando

31

Page 32: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo:

Campo do ComentárioCampo do Comentário

32

Page 33: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo:

33

Page 34: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

34

Page 35: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

35

Page 36: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

São utilizadas para complementar as informações que permitam a montagem efetiva do programa.

• Indicar o Endereço Inicial do Programa.

• Reservar área de Dados

• Definir equivalência entre valores

• Etc…

36

Page 37: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Principais Diretivas:

37

Page 38: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Principais Diretivas:

Armazena na posição 0010h da Memória de Programa, o Byte 05h e na posição seguinte (0011h) o Byte CFh

Exemplo:

38

Page 39: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Principais Diretivas:

39

Page 40: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Principais Diretivas:

40

Page 41: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Principais Diretivas:

• O literal só pode receber um único valor.

• O valor pode ser um valor numérico ou uma expressão.

• Atribui um valor a um literal.

• Uma vez declarado o valor do literal este não poderá ser redefinido.

4) Diretiva EQU ---- (Equate) Igual literal EQU valor

Exemplo:

Controle Controle

Exemplo:

ORG 0

Controle EQU 10h ; atribui 10h ao literal Controle

MOV A, #Controle ; Acumulador = 10h

41

Page 42: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

42

Page 43: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

43

Page 44: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

44

Page 45: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

CONTROLE DE FLUXO DE PROGRAMACONTROLE DE FLUXO DE PROGRAMA

A instrução CJNE (compare e salte se não for igual) faz o flag de carrymaior que o conteúdo do registrador em questão (A,

A instrução CJNE (compare e salte se não for igual) faz o flag de carry = 1 depois da execução, se o dado em comparação for maior que o conteúdo do registrador em questão (A, Rn ou @Ri).

CJNE A,direct,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel

Comparação de Bytes

45

Page 46: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

CONTROLE DE FLUXO DE PROGRAMACONTROLE DE FLUXO DE PROGRAMA

CJNE A,Valor,Test ;Desvie se A < Valor. Test: JC LT

CJNE A,Valor,Test ;Desvie se A >= Valor. Test: JNC GTE

CJNE A,Valor,Test ;Desvie se A > Valor. SJMP Else Test: JNC GT Else: -----

CJNE A,Valor,Test ;Desvie se A <= Valor. SJMP LTE Test: JC LTE

46

Page 47: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

47

Teste de Bits

JB bit,rel

Testa o bit e salta para o endereço rel se bit=1

ORG 0 SAI:

ORG 0 JB P1.0,SAI SJMP CONT SAI: ------

Page 48: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

48

Teste de Bits

ORG 0 SAI:

ORG 0 JNB P1.0,SAI SJMP CONT SAI: ------

JNB bit,rel

Testa o bit e salta para o endereço rel se bit=0

Page 49: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

49

Teste de Bits

ORG 0 SAI:

ORG 0 JBC P1.0,SAI SJMP CONT SAI: ------

JBC bit,rel

Testa o bit , salta para o endereço rel se bit=1 e complementa o bit

Page 50: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

DADOS ARMAZENADOS NA MEMÓRIA DE DADOS ARMAZENADOS NA MEMÓRIA DE PROGRAMAPROGRAMA

Dados são armazenados na Memória de Programa somente usando as gravação do programa.

Dados são armazenados na Memória de Programa somente usando as Psudo-Instruções DB ou DW, durante a fase de gravação do programa.

MOVC A, @A+DPTR

MOVC A, @A+PC

Existem duas instruções apenas que permitem ler estes dados armazenados na Memória de ProgramaExistem duas instruções apenas que permitem ler estes dados armazenados na Memória de Programa

50

Page 51: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

EXEMPLO:EXEMPLO:

Somar dois dados armazenados na Memória de Programa.

51

Page 52: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Estrutura de Programação Assembly Estrutura de Programação Assembly

Programa Principal

Programa Principal

Chamada de Sub-rotina1

Chamada de Sub-rotina2

Programa Principal

Chamada de Sub-rotina3

Programa Principal

Sub-rotina1

Sub-rotina2

Sub-rotina3

Page 53: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

•É um procedimento estabelecido pelo programador que executa alguma tarefa específica.

• Cada chamada de dentro do Programa Principal causa um desvio automático para o endereço da sub-rotina chamada.

• Ao terminar a execução da sub-rotina o Contador de Programa (PC) retorna a execução para a próxima instrução dentro do Programa Principal, após a instrução de chamada.

• Ao terminar a execução da sub-rotina o Contador de Programa (PC) retorna a execução para a próxima instrução dentro do Programa Principal, após a instrução de chamada.

• O endereço de retorno da Sub-rotina é armazenado na Pilha no endereço apontado pelo • O endereço de retorno da Sub-rotina é armazenado na Pilha no endereço apontado pelo Stack Pointer (SP).

Page 54: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Exemplo: Exemplo:

ACALL muda a execução do programa para o endereço da sub-rotina DELAY

RET retorna a execução do programa para a próxima instrução abaixo da chamada ACALL

O endereço de retorno (posição da instrução MOV A#00) é armazenado na Pilha definida por SP e recuperado pela instrução RET

O endereço de retorno (posição da instrução MOV A#00) é armazenado na Pilha definida por SP e recuperado pela instrução RET

$

Page 55: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

Sub-rotinas re-entrantes

• De dentro de uma Sub-rotina pode ser chamada outra sub-rotina.• De dentro de uma Sub-rotina pode ser chamada outra sub-rotina.

Exemplo: A cada chamada um endereço de retorno é armazenado na Pilha. A cada retorno o endereço é removido da Pilha.

A cada chamada um endereço de retorno é armazenado na Pilha. A cada retorno o endereço é removido da Pilha.

$

Page 56: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

ERROS COMUNS!!!!!!! ERROS COMUNS!!!!!!!

????? $

Saltar com JUMP para dentro de Sub-rotinas.

Conseqüência: O PC será carregado com o último valor armazenado na PILHA (???). O programa se perderá.

Page 57: Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa o bit e salta para o endereço rel se bit=1 ORG 0 SAI: JB P1.0,SAI SJMP CONT -----

ERROS COMUNS!!!!!!! ERROS COMUNS!!!!!!!

Saltar de Sub-rotinas com JUMP para dentro de Programas.

Conseqüência: Estouro da PILHA Conseqüência: Estouro da PILHA