Faculdade de Engenharia de Ilha Solteira – Departamento de Engenharia Elétrica ELE 1078 - Microprocessadores I 3 - Fluxograma e Instruções de Desvio do 8085 É um tipo de diagrama de blocos, com visualização através de símbolos específicos, utilizado na estruturação de programas complexos. O uso de um fluxograma facilita a tarefa do programador e permite a identificação, de maneira rápida, da função de um determinado programa. Sua elaboração deve ser, na media do possível, independente da linguagem de programação. A seguir são apresentados os principais símbolos utilizados na elaboração de fluxogramas. Representa o início, fim ou interrupção de um programa Resolução de um problema, tarefa ou processamento Tarefa ou processamento repetitivo (subrotina) Ponto de teste ou tomada de decisão (desvios) Entrada de dados via teclado Entrada/Saída genérica Saída via impressora 1 Ligação com outra parte do fluxograma Os símbolos apresentados são suficientes para a elaboração de fluxogramas dentro dos objetivos do curso. Entretanto, deve-se verificar com mais atenção a elaboração de relatórios técnicos e/ou científicos. Para se ter uma idéia do uso de fluxogramas, considere o exemplo seguinte: Exemplo: Elaborar o fluxograma de um programa que lê dois números via teclado, subtrai o segundo do primeiro e calcula a raiz quadrada do resultado. Se a subtração gerar um número negativo o resultado deve ser zero. 22 Faculdade de Engenharia de Ilha Solteira – Departamento de Engenharia Elétrica ELE 1078 - Microprocessadores I Início Lê dois números Início (A e B) (R = A - B) NÃO R >= ZERO ? SIM R= 0 R = sqrt(R) FIM O blocos de comparação/teste são implementados através de instruções de comparação em conjunto com instruções de saltos condicionais. Há também a possibilidade de desvios usando instruções de chamada de subrotinas (“CALL”). 3.1 – Instruções de Desvio (Salto) do 8085 53 - JMP endereço → Desvio incondicional do programa para o endereço especificado. (PC) ← endereço (Exemplo: JMP 2050h) J xx endereço → Desvia o fluxo do programa do programa para o endereço especificado de acordo com os flags, definindo assim um desvio CONDICIONADO. Se a condição especificada é verdadeira, o PC é carregado com o endereço especificado. Em caso contrário, o programa continua com a execução da próxima instrução (após Jxx). As condições que podem ser especificadas definem as seguintes instruções de salto no 8085: 54 - JNZ endereço→ Desvia se o flag Z = 0 (resultado não-nulo no acumulador). 55 - JZ endereço → Desvia se o flag Z = 1 (resultado NULO no acumulador). 56 - JNC endereço → Desvia se o flag CY = 0 (não houve carry – resultado de 8 bits) 57 - JC endereço → Desvia se o flag CY =1 (carry → mais de 8 bits - OVERFLOW) 58 - JPO endereço → Desvia se o flag P= 0 (Paridade ímpar – Número de “1” ímpar). 59 - JPE endereço → Desvia se o flag P =1 (Paridade Par – Número de “1” PAR). 12 Faculdade de Engenharia de Ilha Solteira – Departamento de Engenharia Elétrica ELE 1078 - Microprocessadores I 60 - JP endereço → Desvia se o o flag S = 0 (resultado com bit7=0). 61 - JM endereço → Desvia se o flag S = 1 ( resultado com bit7 =1). Outra instrução que permite desvio é: 62 - PCHL → Transfere o conteúdo do par HL para o PC: PC ← (HL) , ou seja, PCH ← (H) e PCL ← (L) O conteúdo do registrador H é movido para os oito bits mais significativos do PC e o conteúdo do registrador L é movido para os oito bits menos significativos PC. C – Estrutura de um Programa em Linguagem Assembly A linguagem “assembly” permite a substituição dos códigos de máquina por “mnemônicos”, mas não é tudo. Os compiladores de linguagem “assembly” permitem a elaboração de programas bem estruturados, inclusive com o uso de comentários. De maneira simplificada, os campos básicos da linguagem “assembly” podem ser visualizados no exemplo seguinte: Endereço (H) Label Instrução Operando Op. Code Comentário LXI H, 2050 21 50 20 Carrega HL com 2050 MVI A, 00 3E 00 Carrega A com ZERO MOV B, M 46 Carrega B com [(HL)] 2006 ADD B 80 Soma A com B 2007 MOV M, A 77 Salva A em [(HL)] 2008 JNC CARREGA D2 05 20 Desvia se CY=0; RST 1 CF Fim do programa 2000 INICIO: 2003 2005 200B CARREGA: FIM: No exemplo anterior dois pontos são destacados: primeiro, não há necessidade da definição dos endereços de retorno (Ex. CARREGA), pois o compilador os armazena automaticamente; segundo, pode-se adicionar comentário linha a linha, facilitando a documentação do programa. Outras facilidades existem nos modernos compiladores “assembly”, como a definição do endereço inicial, a criação de tabelas indexadas, etc. 13