microprocessadores i ele 1078 - feis.unesp.br · grupos de instruções do 8085 ... move dados...

38
Microprocessadores I ELE 1078 Aula 7 Conjunto de Instruções do Microprocessador 8085 Desvios

Upload: duongnga

Post on 18-Jan-2019

216 views

Category:

Documents


0 download

TRANSCRIPT

Microprocessadores I – ELE 1078

Aula 7

Conjunto de Instruções do Microprocessador

8085

Desvios

Grupos de Instruções do 8085

As instruções no 8085 são distribuídas em 5 grupos:

1. Grupo de transferência da dados: Move dados entre registradores ou

posição de memória e registradores;

2. Grupo Aritmético: Adição, subtração, Incrementos, decremento;

3. Grupo Lógico: AND, OR, XOR, Comparação, Rotação, Complemento;

4. Grupo de Desvio: Condicionais, Incondicionais, Subrotinas;

5. Grupo de Controle, Pilha, Entrada e Saída.

7.1 - Instruções de Desvios

• São instruções que permitem alterar a seqüência de execução de um programa.

• São a chave para a flexibilidade e a versatilidade de programação dos computadores.

– Incondicionais

– Condicionais (sob certas condições de teste)

• O computador é uma máquina seqüencial:

• Executa sequencialmente os códigos de máquinas armazenados em memórias, uma após outra.

• Instruções de desvios, informam ao microprocessador que a seqüência de execução das instruções é desviada (alterada) para uma nova posição.

• O microprocessador continua executando as instruções sequencialmente a partir dessa nova posição de memória.

7.2 - Instruções de Desvios

As instruções de desvios são classificadas em:

• Instruções de jump;

• Instruções de Chamada (Call) e Retorno (Return);

• Instruções de reinício (Restart).

As instruções Call e Return estão relacionadas com subrotinas.

As instruções Restart estão relacionadas com técnicas de interrupções.

Instruções de Jump

START: IN 21H ; Lê chaves de entradas no porto 21H

OUT 22H ; Aciona dispositivos no porto 22H

JMP START ; Retorna para o início para ler as chaves novamente.

7.3 - Instruções de Desvios

• As instruções de Jump são instruçoes de 3 bytes:

• Um byte para o Opcode seguido de dois bytes de endereçamento de memória.

• O segundo byte é o endereço baixo e o terceiro é o endereço alto.

• Nenhum Flag é afetado

• As instruções de desvios incondicionais simplesmente alteram o fluxo do programa alterando o valor do PC (Contador de Programa).

• As instruções de desvio condicionais examinam o estado (status) de alguns Flags para verificar se o desvio deve ser executado.

Zero

Sinal

Paridade

Carry

• Duas instruções de Jump são associados a cada Flag

(Desvio por flag setado e Desvio por flag zerado).

7.4 - Instruções de Desvios

7.5 - Código de Operação das Instruções de Desvios

• As instruções de Desvios Condicionais gastam diferentes números

de Estados T para serem executadas, dependendo da condição

testada ser verdadeira ou falsa.

• A instrução JC gasta 10 Estados T se a condição for verdadeira

(CY=1) e gasta 7 Estados T se a condição for falsa (CY=0).

7.6 - Exemplo de Instruções de Desvios

7.7 - Exemplo de Instruções de Desvios

7.8 - Exemplo de Instruções de Desvios

7.9 - Exemplo de Instruções de Desvios

7.10 - Exemplo de Instruções de Desvios

7.11 - Exemplo de Instruções de Desvios

7.12 - Exemplo de Programa com Instruções de Desvios

Programa que faz a multiplicação de 4 por 3.

7.13 - Exemplo de Programa com Instruções de Desvios

Programa que faz a multiplicação de 4 por 3.

7.14 - Exemplo de Programa com Instruções de Desvios

Programa que faz a multiplicação de 4 por 3.

7.15 - Fluxograma

7.16 - Elaborar o fluxograma de um programa que lê dois números via teclado,

subtrai o segundo do primeiro e calcula a raiz quadrado do resultado. Se a

subtração gera um número negativo o resultado deve ser zero.

7.17 - Estrutura de um programa em linguagem Assembly

7.18 – Exercício

Elabore um programa que faça a transferência do bloco de memória da

posição 2040H até 2060H para o endereço a partir da posição 2070H.

7.18 – Exercício Elabore um programa que faça a

transferência do bloco de memória da posição 2040H até

2060H para o endereço a partir da posição 2070H.

7.18 – Exercício Elabore um programa que faça a transferência do bloco

de memória da posição 2040H até 2060H para o endereço a partir da

posição 2070H.

7.18 – Exercício Elabore um programa que faça a transferência do bloco de

memória da posição 2040H até 2060H para o endereço a partir da posição

2070H.

7.18 – Exercício Elabore um programa que faça a transferência do bloco

de memória da posição 2040H até 2060H para o endereço a partir da

posição 2070H.

7.18 – Exercício Elabore um programa que faça a transferência do bloco de

memória da posição 2040H até 2060H para o endereço a partir da posição

2070H.

7.19 - Escreva um programa para carregar o acumulador com o valor 64H e

verificar se o byte contido na endereço de memória 2050H é igual ao conteúdo do

acumulador.

Se os valores forem iguais, incremente o acumulador e armazene o seu

valor no endereço 2070H. Se os valores forem diferentes, decremente o conteúdo

do endereço 2050H e armazene o valor do acumulador acrescido de 1 no endereço

2080H.

7.19 - Exercicio

7.20 - Um conjunto de bytes é armazenado a partir do endereço 2050H.

O final desse grupo de bytes é identificado pelo byte FFH.

Escreva um programa para somar todos os bytes e armazenar o

resultado no endereço de memória 2080H (byte mais significatico) e 2081H

(byte menos significativo).

7.20

Exercício 4.

7.21 - Elabore um programa para multiplicar dois números inteiros binários de 8

bits, armazenados nas posições 2080H e 2081H. O resultado deve ser armazenado

a partir da posição 2090H.

Exercício 4.

Elabore um programa para multiplicar dois números inteiros binários de 8 bits, armazenados

nas posições 2080H e 2081H. O resultado deve ser armazenado a partir da posição 2090H.

7.15 - Exemplo de Programa com Instruções de Desvios

• Armazene os números 9BH e A7H nos registradores D e E.

• Adicione o conteúdo desses dois registradores. Se a soma for maior

que FFH, armazene 01H no endereço 2070H, caso contrário

armazena a soma no mesmo endereço.

7.15 - Exemplo de Programa com Instruções de Desvios

Armazene os números 9BH e A7H nos registradores D e E.

Adicione o conteúdo desses dois registradores. Se a soma for maior que

FFH, armazene 01H no endereço 2070H, caso contrário armazena

a soma no mesmo endereço.

1. Carregar os números no acumuladores;

2. Adicionar os números;

3. Verificar a soma (soma > FFH):

4. Se SIM armazene 01 e se não armazene a soma.

5. Fim

7.15 - Exemplo de Programa com Instruções de Desvios

Armazene os números 9BH e A7H nos registradores D e E

respectivamente. Adicione esses números. Se a soma for maior que

FFH, armazene 01H no endereço 2070H, senão armazena a soma

no mesmo endereço.

Carregar os números no acumuladores;

1. Adicionar os números;

2. Verificar a soma (soma > FFH):

4. Se SIM carregue 01 no Acumulador;

5. Armazene o conteúdo do Acumulador;

6. Fim .

Existe Carry?

Se a resposta é não então altere o fluxo do programa, o que equivale

utilizar a instrução JNC.

Exercício

Exercício

Exercício

Exercício