Вы находитесь на странице: 1из 11

Universidade Estadual Paulista Jlio de Mesquita Filho FEIS - Campus de Ilha-Solteira

ELE1078 SP2 Microprocessadores I

Relatrio do 4 Experimento : Pilhas e Subrotinas

Docente : Prof. Dr. Alexandre Csar Rodrigues da Silva Discente : Guilherme Saggioratto R.A. : 201014301

Ilha Solteira, 14 de maio de 2012

Sumrio
1 Objetivos ............................................................... pg 2

2 Introduo Terica ...................................... pg 2 3 Procedimento Experimental ........................ pg 5 4 Resultados e discusses ............................... pg 6 5 Concluso .................................................... pg 9 6 Referncias Bibliogrficas .......................... pg 10

1 Objetivos
Entender o conceito de PILHA e apresentar as instrues de Subrotinas do 8085.

2 Introduo terica
O modo adequado para a inicializao da pilha no 8085 usar a seguinte instruo : LXI SP, dado16.

A- Instrues para a manipulao da pilha no 8085


PUSH PR guarda o contedo do par de registradores especificado na pilha. PUSH PSW salva o contedo do acumulador e os FLAGs na pilha. POP PR carrega o par de registradores com o contedo de duas posies da pilha. POP PSW Carrega o acumulador e os FLAGs com valores da pilha. Existem duas instrues associadas ao par de registros HL e o apontador de pilha PC: XTHL Os valores de HL e SP so trocados; SPHL Faz SP ser igual a HL. PCHL (PCh) = (H), (PCI) = (L)

B Instrues para a manipulao de subrotinas no 8085


CALL end16 Chama a subrotina a partir do endereo especificado, incodicionalmente. Cccc end16 Chama a subrotina se a condio ccc verdadeira. CNZ end16 Chama uma subrotina a partir do endereo especificado se o FLAG Z=0. CZ end16 Chama uma subrotina a partir do endereo especificado se o FLAG Z=1. CNC end16 Chama uma subrotina a partir do endereo especificado se o FLAG CY=0. CC end16 Chama uma subrotina a partir do endereo especificado se o FLAG CY=1. CPO end16 Chama uma subrotina a partir do endereo especificado se o FLAG P=0. 2

CPE end16 Chama uma subrotina a partir do endereo especificado se o FLAG P=1. CP end16 Chama uma subrotina a partir do endereo especificado se o FLAG S=0. CM end16 Chama uma subrotina a partir do endereo especificado se o FLAG S=1. RET indica o retorno de uma subrotina de maneira incondicional; Rccc indica o retorno de uma subrotina, condicionada ccc ser verdadeira; RNZ end16 retorna da subrotina se o FLAG Z=0. RZ end16 retorna da subrotina se o FLAG Z=1. RNC end16 retorna da subrotina se o FLAG CY=0. RC end16 retorna da subrotina se o FLAG CY=1. RPO end16 retorna da subrotina se o FLAG P=0. RPE end16 retorna da subrotina se o FLAG P=1. RP end16 retorna da subrotina se o FLAG S=0. RM end16 retorna da subrotina se o FLAG S=1.

C Estrutura de subrotinas Subrotinas do mdulo MC-1 -Delay (atraso) Decrementa o par de registradores DE de seu valor inicial at
atingir 0000H;

Subrotina Delay Endereo Entrada Funo Sada Registradores afetados


Observao : Menor atraso: DE = 0001H Maior atraso: DE = 0000H

05F1H Par DE Atraso No tem A,D e E

(Tabela 2.1. - Subtroina Delay)

-UPDDT Apresenta um dado de 8 bits no campo de dados do display;

Subrotina UPDDT Endereo Entrada Funo Sada Registradores afetados (Tabela 2.2. Subrotina UPDDT) 036EH A Mostrar dado (8 bits) no display No tem Todos

-UPDAD apresenta um valor de 16 bits no campo de endereo do display;

Subrotina UPDAD Endereo Entrada Funo Sada Registradores afetados (Tabela 2.3. Subrotina UPDAD) 0363h DE Mostrar dado (16 bits) no display No tem Todos

3 Procedimento Experimental
4.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 visualizao; 4.2. Modifique o proprama anterior para apresentar a contagem em decimal; 4.3. Faa a contagem decimal em ordem crescente. Use a subrotina DELAY de modo a obter intervalo de 1 segundos entre as contagens; 4.4. Faa um programa que mostre nos displays o endereo de memrias e seu contedo, da faixa de endereos 2000H a 201FH indefinidamente.

4 Resultados e Discusses
4.1.
Endereo 2000H 2003H 2006H 2008H 2009H 200AH 200DH 200EH 200FH 2013H 2014H 2015H Mnemnico LXI SP 20B0H LXI D 2000H MVI A 00H PUSH PSW PUSH D POP D PUSH D CALL DELAY POP D POP PSW INR A OP CODE 31 B0 20 11 00 20 3E 00 F5 D5 D1 D5 CD F1 05 D1 F1 3C Comentrios Define a pilha a partir do endereo 20B0H Carrega o par DE com 2000H Carrega o A com 00H Salva na pilha o valor de A e F Salva na pilha o valor do par DE Chama a subrotina UPDDT Recupera o valor do par DE Salva o par DE na pilha Chama a subrotina delay Recupera o valor do par DE Recupera o valor de A e F Incrementa A Retorna para o endereo 2008H

CALL UPDDT CD 6E 03

2016H JMP 2008H C3 08 20 (Tabela 4.1 Exerccio 4.1.)

Comentrios :O Programa ir repetir a contagem indefinidamente pois a instruo de 'jump' incondicional SEMPRE voltar para o endereo 2008H. Note que para aumentar ou diminuir a velocidade da contagem , basta apenas mudar o valor armazenado no par DE.

4.2.
Endereo 2000H 2003H 2005H 2006H 2009H 200CH 200FH 2010H Mnemnico LXI SP 20B0H MVI A 00H PUSH PSW LXI D 2000H POP PSW INR A OP CODE 31 B0 20 3E 00 F5 11 00 20 F1 3C Comentrios Define a pilha a partir do endereo 20B0H Carrega A com 00H Guarda na pilha A e F Chama a subrotina UPDDT Carrega o par DE com 2000H Chama a subrotina DELAY Recupera os valores de A e F Incrementa A
6

CALL UPDDT CD 6E 03 CALL DELAY CD F1 05

2011H 2012H

ORA A DAA

B7 27 C3 05 20

Operao OR : A com A Converte o valor em decimal Volta para o endereo 2005H

2013H JMP 2005H (tabela 4.2. - Execcio 4.2.)

Comentrios : Como no anterior vc pode aumentar ou diminuir a velocidade de execuo mudando apenas o valor carregado no par DE.

4.3.
Endereo 2000H 2003H 2005H 2006H 2009H 200CH 200FH 2012H 2015H 2016H 2018H 201BH 201CH 201DH 201FH 2021H 2022H 2024H Mnemnico LXI SP 20B0H MVI A 99H PUSH PSW LXI D FFFFH LXI D 7E7DH POP PSW CPI 00H JZ 2003H DCR A MOV B,A ANI 0FH CPI 0FH MOV A,B JNZ 2005H SUI 06H OP CODE 31 B0 20 3E 99 F5 11 FF FF 11 7D 7E F1 FE 00 CA 03 20 3D 47 E6 0F FE 0F 78 C2 05 20 D6 06 C3 05 20 Comentrios Define a pilha a partir do endereo 20B0H Carrega o A com 99H Guarda na pilha o valor de A e F Chama a subrotina UPDDT Carrega o valor FFFFH no par DE Chama a subrotina DELAY Carrega o valor 7E7DH no par DE Chama a subrotina DELAY Recupera o valor de A e F Compara o valor no A com 00H Caso Z=1 vai para 2003H, seno continua Decrementa A Move o valor de A para B Operao valor em A 'and' 0FH Compara o valor da operao com 0FH Move o valor de B para A Se Z=0 vai para 2005H,seno continua Subtrai o valor de A por 06H Volta incondicionalmente para 2005H

CALL UPDDT CD 6E 03 CALL DELAY CD F1 05 CALL DELAY CD F1 05

2027H JMP 2005H (tabela 4.3. - exerccio 4.3)

Comentrios : Para obter o delay de 1 segundo so utilizados duas chamadas consecutivas a subrotina DELAY , uma com o par DE carregado com o valor FFFFH e outra com 7E7DH. 7

No programa verificado se o valor no acumulador atingiu algum valor com o LSB sendo F(Hexadecimal) assim o subtrai por 06H e o valor obtido 9(Hexadecimal), com isso a correo para a base decimal feita , e o contador decrescente em decimal obtido.

4.4.
Endereo 2000H 2003H 2006H 2007H 2008H 200BH 200CH 200DH 200EH 200FH 2012H 2015H 2018H 2019H 201AH 201BH 201DH Mnemnico LXI SP 20B0H LXI H 2000H MOV A,M PUSH H POP H MOV D,H MOV E,L PUSH H LXI D 5000H POP H INX H MOV A,L CPI 20H JNZ 2006H OP CODE 31 B0 20 21 00 20 7E E5 E1 54 5D E5 11 00 50 E1 23 7D FE 20 C2 06 20 Comentrios Define a pilha a partir do endereo 20B0H Carrega o par HL com o valor 2000H Move o valor no endereo do par HL pra A Salva na pilha o valor do par HL Chama a subrotina UPDDT Recupera o valor do par HL Move o valor de H para D Move o valor de L para E Salva o par HL na pilha Chama a subrotina UPDAD Carrega o par DE com 5000H Chama a subrotina DELAY Recupera o valor do par HL Incrementa o par HL Move o valor de L para A Compara com 20H Caso Z=0 volta para 2006H,seno continua Volta incondicionalmente para 2003H

CALL UPDDT CD 6E 03

CALL UPDAD CD 63 03 CALL DELAY CD F1 05

2020H JMP 2003H C3 03 20 (tabela 4.4. - Exerccio 4.4.)

Comentrios : A subrotina UPDDT chamada para mostrar o valor contido na memria , e a subrotina UPDAD chamada para mostrar o endereo a que corresponde esse valor. O processo repetido at o endereo 201FH , quando o programa comea do endereo 2000H e repete todo processo.

5 Concluso
A pilha necessria quando o programa envolve subrotinas , que facilitam muito a programao e tornam o programa mais dinnico e inteligente. SEMPRE quando subrotinas forem utilizadas , deve-se definir a faixa de memria onde a pilha ir trabalhar , isso de extrema importncia. Para trabalhar com uma subrotina , os parmetros que sero utilizados com entrada devem ser conhecidos , assim como os registradores afetados , a sada caso haja , assim utilizar a subrotina de maneira adequada.

6 Referncias Bibliogrficas
Notas de aula e slides , Prof. Doutor Alexandre Csar Rodrigues da Silva , Unesp-FEIS/2012/1 , Ilha Solteira-SP

10

Вам также может понравиться