·

Engenharia Elétrica ·

Microprocessadores

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta
Equipe Meu Guru

Prefere sua atividade resolvida por um tutor especialista?

  • Receba resolvida até o seu prazo
  • Converse com o tutor pelo chat
  • Garantia de 7 dias contra erros

Texto de pré-visualização

- Instruções de Chamada de Subrotinas do 8085 - Microprocessadores I Professor: Alexandre César Rodrigues da Silva Universidade Estadual Paulista “Júlio de Mesquita Filho” Faculdade de Engenharia – Câmpus de Ilha Solteira Departamento de Engenharia Elétrica - 2º Semestre de 2021 - CPU - FLAGs - PC - SP Arquitetura Interna do 8085 1 Fluxo do Programa Fluxo do Programa 2 Fluxo do Programa e Desvios Fluxo do Programa Desvios Condicionais 3 Fluxo do Programa com chamada de Subrotina Fluxo do Programa Chamada de Subrotina Condicionais 4 Subrotina Subrotinas são programas, escritos separadamente do programa principal, para processar Dados/Endereços que ocorrem repetidamente no programa principal. Para que a subrotina possa executar o processamento em diferentes partes do programa principal, é necessário a passagem de dados/endereços para a subrotina. Este procedimento de passagem de dados/endereços para a subrotina é chamado de parâmetros da subrotina. Quatro maneiras de parametrizar uma subrotina. Usando registradores; Usando ponteiros; Usando memórias; Usando a pilha. 5 Pilha A Pilha (STACK) é um grupo de endereços de memória localizado na memória de Leitura/Escrita. 6 Pilha A Pilha é utilizada para armazenar informações temporariamente durante a execução de um programa. Também é utilizada na chamada de subrotina para armazenar o endereço de retorno; A Pilha é inicializada por um registrador de 16 bits, chamado de Ponteiro de Pilha (Stack Pointer); A Pilha é utilizada pelo microprocessador e pelo programador. O programador usa a pilha para salvar/recuperar dados através das instruções PUSH/POP, respectivamente; O microprocessador utiliza a Pilha para armazenar o endereço de retorno quando uma subrotina é chamada (CALL). 7 Pilha Geralmente, a Pilha é inicializada na parte alta da memória (endereços no final da memória) através do Ponteiro de Pilha (SP) Existem dois métodos para inicializar a Pilha, Direto; Na maioria das vezes a Pilha é inicializada pelo método direto no início do programa: LXI SP, 20B0H. Indireto. O método indireto é utilizado quando a Pilha precisa ser definida pelo próprio programa. LXI H, <dado16>, seguido da instrução SPHL localizada adequadamente no programa para carregar o conteúdo do par H no SP. O modelo de pilha utilizado no 8085 é do tipo LIFO (Last-IN-First-OUT). 8 Chamadas de uma Subrotina Múltiplas Chamadas 9 Chamadas de uma Subrotina Aninhamento 10 Retorno de uma Subrotina Incondicional e Condicional. 11 Conjunto de Instruções do 8085 - ( Instruction Set ) ISA - Instruction Set Architecture As instruções do 8085 são classificadas em 5 grupos de instruções: Instruções de Transferência de dados; Instruções Aritméticas; Instruções Lógicas; Instruções de Desvios; Instruções de Controle. 12 Conjunto de Instruções do 8085 - ( Instruction Set ) As instruções do 8085 são classificadas em 5 grupos de instruções: Instruções de Transferência de dados; Instruções Aritméticas; Instruções Lógicas; Instruções de Desvios; Instruções de Controle. 13 Instruções de Chamada de Subrotina. CALL addr16 Trata-se de uma chama de subrotina incondicional; Quando esta instrução é executada o endereço da próxima instrução é armazenada na Pilha. O endereço (addr16) é movido para o Contador de Programa (PC). O Processador inicia a execução da instrução armazenada no endereço addr16 (Início da Subrotina); Chamada de Subrotina Incondicional 14 Instruções de Chamada de Subrotina Condicional. C <condição> addr16 IF <condição> é Verdade Então Call addr16; Trata-se de uma chamada de subrotina condicional; As instruções de subrotinas condicionais verificam as condições das FLAGs. Se a condição da FLAG é verdadeira então o endereço da próxima instrução é armazenada na Pilha e o endereço addr16 é movido para o Contador de Programa (PC). O Processador inicia a execução da instrução armazenada no endereço addr16 (início da subrotina); Se a condição da FLAG for falsa a próxima instrução é executada. Chamada de Subrotinas Condicionais 15 Instruções de Chamada de Subrotina Condicional. C <condição> addr16 CZ addr16 => Chamada de subrotina se a Flag Z = 1; CNZ addr16 => Chamada de subrotina se a Flag Z = 0; CC addr16 => Chamada de subrotina se a Flag CY = 1; CNC addr16 => Chamada de subrotina se a Flag CY = 0; CM addr16 => Chamada de subrotina se a Flag S = 1; CP addr16 => Chamada de subrotina se a Flag S = 0; CPE addr16 => Chamada de subrotina se a Flag P = 1; CPO addr16 => Chamada de subrotina se a Flag P = 0; Chamada de Subrotinas Condicionais 16 Instrução de Retorno de Subrotina. RET Trata-se de um retorno incondicional; A instrução RET é inserida no final da subrotina para que o fluxo do programa retorne para o endereço contido no topo da Pilha. Quando esta instrução é executada o topo da Pilha é copiado para o PC (Contador de Programa); Note que: Na chamada de uma Subrotina com a instrução CALL, o endereço de retorno é armazenado na Pilha. A instrução RET transfere para o PC (Contador de Programa) o endereço do topo da Pilha. Então o processador retorna para a execução no programa principal, cujo endereço está armazenado no topo da pilha; Retorno Incondicional 17 Instruções de Retornos Condicionais. R <condição> IF <condição> é Verdade Então a execução retorna para o endereço contido no topo da pilha; Trata-se de um retorno de subrotina condicional; As instruções de retornos condicionais verificam as condições das FLAGs. Se a condição da FLAG é verdadeira então o endereço para a próxima instrução é retirada do topo da pilha e movido para o Contador de Programa (PC). O Processador inicia a execução da instrução armazenada no endereço contido no PC. Se a condição da FLAG for falsa a próxima instrução é executada. Retornos Condicionais 18 Instruções de Retorno Condicional. R <condição> RZ => Chamada de subrotina se a Flag Z = 1; RNZ => Chamada de subrotina se a Flag Z = 0; RC => Chamada de subrotina se a Flag CY = 1; RNC => Chamada de subrotina se a Flag CY = 0; RM => Chamada de subrotina se a Flag S = 1; RP => Chamada de subrotina se a Flag S = 0; RPE => Chamada de subrotina se a Flag P = 1; RPO => Chamada de subrotina se a Flag P = 0; Retornos Condicionais 19 Instruções de Interrupções RST n Interrupções por software; Interrupções por Hardware; Estas instruções também utilizam a Pilha 20 Instruções de Transferência do 8085 - ( Uso da Pilha ) O 8085 tem duas instruções de transferência de dados que utiliza a Pilha: PUSH; Push B; Push D; Push H; Push PSW. POP. POP PSW; POP H; POP D; POP B. L I F O 21 Instruções de Transferência de dados. PUSH Rp O conteúdo do par de registradores Rp é armazenado na pilha. Os pares de registradores Rp são: B = BC, D = DE, H = HL e PSW (Program Status Word) = AF. Nenhuma Flag é alterada. A instrução é executada como segue: 1. O conteúdo do registrador SP é decrementado de 1; 2. O registrador mais significado do par Rp é copiado para a memória endereçada por SP; 3. O conteúdo do registrador SP é decrementado de 1; 4. O registrador menos significado do par Rp é copiado para a memória endereçada por SP. 22 Instruções de Transferência de dados. Exemplo: LXI SP, 2053H PUSH B 23 Instruções de Transferência de dados. POP Rp O conteúdo do topo da pilha e copiado para par de registradores Rp. Os pares de registradores Rp são: B = BC, D = DE, H = HL e PSW (Program Status Word) = AF. Nenhuma Flag é alterada. A instrução é executada como segue: 1. O conteúdo da memória endereçada pelo registrador SP é copiado para o registrador menos significativo do par de registradores; 2. O conteúdo do registrador SP é incrementado de 1; 3. O conteúdo da memória endereçada pelo registrador SP é copiado para o registrador mais significativo do par de registradores; 4. O conteúdo do registrador SP é incrementado de 1. 24 Instruções de Transferência de dados. Exemplo: POP D SP = [1000H] 25 Subrotinas do Módulo (Abacus) Delay 26 Subrotinas do Módulo (Abacus) Delay 27 Subrotinas do Módulo (Abacus) Delay 28 Subrotinas do Módulo (Abacus) UPDDT 29 Subrotinas do Módulo (Abacus) UPDAD 30 Subrotinas do Módulo (Abacus) RDKBD 31 Dobre a cada dia a sua taxa de erros 32 Exemplo 1: Fazer um programa para contar de 00H a FFH indefinidamente, mostrando o valor da contagem no campo de dados do display. Use a subrotina delay para facilitar a visualização. Exemplo 1: Abacus Mensagem: Endereço Código hexa Mnemônico 2000 31 B0 20 LXI SP, 2080H 2003 3E 00 MVI A, 00H 2005 F5 PUSH PSW 2006 CD 6E 03 CALL 036EH 2009 11 00 40 LXI D, 4000H 200C CD F1 05 CALL 05F1H 200F F1 POP PSW 2010 C6 01 ADI 01H 2012 C3 05 20 JMP 2005H . . . 2025 NOP Exemplo 2: Modifique o programa anterior para apresentar a contagem em decimal. Exemplo 2: Programa: Exe2A.hex Endereço | Código hexa | Mnemônico 2000 | 31 B0 20 | LXI SP,20B0H 2003 | AF | XRA A 2004 | F5 | PUSH PSW 2005 | CD 6E 03 | CALL 036EH 2008 | 11 00 03 | LXI D,0300H 200B | CD F1 05 | CALL 05F1H 200E | F1 | POP PSW 200F | 3C | INR A 2010 | B7 | ORA A 2011 | 27 | DAA 2012 | C3 04 20 | JMP 2004H 2015 | 00 | NOP 2016 | 00 | NOP 2017 | 00 | NOP 2018 | 00 | NOP 2019 | 00 | NOP 201A | 00 | NOP 201B | 00 | NOP 201C | 00 | NOP 201D | 00 | NOP 201E | 00 | NOP 201F | 00 | NOP Exemplo 3: Faça um programa que mostre nos displays o endereço de memória e seu conteúdo, da faixa de endereços 2000H à 201FH, indefinidamente. Exemplo 3: Programa: Aula13_3.hex Endereço | Código hexa | Mnemônico 2000 | 31 B0 20 | LXI SP,20B0H 2003 | 21 00 20 | LXI H,2000H 2006 | E5 | PUSH H 2007 | 7E | MOV A,M 2008 | CD 63 03 | CALL 036EH 200B | D1 | POP D 200C | D5 | PUSH D 200D | CD 63 03 | CALL 0363H 2010 | 11 F0 00 | LXI D,0F0FFH 2013 | CD F1 05 | CALL 05F1H 2016 | E1 | POP H 2017 | 23 | INX H 2018 | 7E | MOV A,L 2019 | FE 21 | CPI 21H 201B | C2 06 20 | JNZ 2006H 201E | C3 03 20 | JMP 2003H 2021 | 00 | NOP 2022 | 00 | NOP 2023 | 00 | NOP 2024 | 00 | NOP 2025 | 00 | NOP 2026 | 00 | NOP 2027 | 00 | NOP 2028 | 00 | NOP 2029 | 00 | NOP 202A | 00 | NOP