Prof. Adilson Gonzaga - USPiris.sel.eesc.usp.br/sel433a/Aula3.pdf · Teste de Bits JB bit,rel Testa...

Preview:

Citation preview

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

• 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

• 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

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.

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

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.

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.

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.

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.

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.

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

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

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

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

15

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

LCALL addr16

• Instruções de Sub-Rotina

ACALL addr11

RET

RETI

16

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

• Instruções de Saltos

LJMP addr16 AJMP addr11

SJMP rel

JMP @A+DPTR

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

18

ADD A,#30h

00

Registrador A

ADD A,#30h

Registrador A

30h 00 + 30h

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

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

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

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

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

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

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

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

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

27

ORG 0

LOOP: MOV A,30H

CJNE A,#00,LOOP

AQUI: SJMP AQUI

Mnemônicos (Programa Assembly)

Código Compilado (Opcode)

COMPILADOR

28

Memória de Programa

E5

30

B4

00

FB

80

00

01

02

03

04

05

Endereço Conteúdo

06 FE

Exemplo:

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

29

Exemplo:

Campo da Operação (Mnemônicos)

Campo da Operação (Mnemônicos)

30

Exemplo:

Campo do OperandoCampo do Operando

31

Exemplo:

Campo do ComentárioCampo do Comentário

32

Exemplo:

33

34

35

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

Principais Diretivas:

37

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

Principais Diretivas:

39

Principais Diretivas:

40

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

42

43

44

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

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

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: ------

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

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

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

EXEMPLO:EXEMPLO:

Somar dois dados armazenados na Memória de Programa.

51

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

•É 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).

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

$

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.

$

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á.

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

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

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