prof. adilson gonzaga - uspiris.sel.eesc.usp.br/sel433a/aula3.pdf · teste de bits jb bit,rel testa...
TRANSCRIPT
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