Você está na página 1de 16

UEM Faculdade de Engenharia Departamento de Engenharia Electrotcnica Curso de Engenharia Informtica

Microprocessadores
Z80. Programao Bsica em Assembly.

Eng. DOHO, G. J Seco de Sistemas Digitais

Z80. Programao Bsica em Assembly

SUMRIO
A. Programas complexos. Diviso em mdulos (programao modular):

1. Chamada a uma subrotina. Implicaes e precaues;


2. Exemplo(s).

B.

Assemblagem por computador:


1. Software assemblador; 2. O processo de assemblagem e linkedio; 3. Formatos dos ficheiros executveis; 4. Transferncia do ficheiro executvel, do PC para o Micamaster

MAT980.
C. Exerccios;

D. Referncias bibliogrficas.
2.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

A - Programas complexos. Diviso em mdulos


(programao modular):

J havamos visto que no projecto lgico da soluo de um problema atravs de um prorama de computador (baseado no Z80 em particular), quando o problema complexo conveniente usar a abordagem modular, consistindo em: 1. dividir o problema em partes e da, o programa em mdulos que resolvem tais partes diferentes do problema. Tais mdulos sero as funes ou subrotinas do programa principal. Este por sua vez chamar s subrotinas cada uma a seu tempo. 2. Para cada sub-rotina definir a interface com o programa principal, isto a lista de parmetros de entrada e a lista de retorno, definindo claramente os registos da CPU e/ou os locais de memria que contm tais parmetros.
3.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

A - Programas complexos. Diviso em mdulos


(programao modular Cont.):
3. Desenhar um diagrama de estrutura (em blocos) que mostra a relao entre o programa principal e os seus subprogramas (sub-rotinas) indicando as variveis de entrada e de saida. 4. Para o programa pricipal e para cada uma das subrotinas, desenhar um fluxograma, diagrama de NS, diagrama de actvidade UML, etc. Qualquer destes devendo interpretar o algoritomo para a soluo da sua parte do problema.

4.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Problema:

Pretende-se receber, calcular e guardar os votos e resultados eleitorais da eleio do representatnte da Turma na AEU do DEEL. Sabe-se que h 36 votantes e 4 candidatos, incluindo o candidato especial VotoNulo. Assim, o programa dever: 1. Para cada um dos votantes, receber do teclado o voto respectivo (1, 2, 3 ou X; onde X qualquer voto diferente de 1, 2, ou 3, devendo ser considerado voto nulo. 2. Fazer o escrutneo: Calcular e guardar a frequencia relativa dos votos 1,2,3,X; 3. Colocar as frequncias relativas em ordem decrescente. 4. Mostrar o vencedor: [Vencedor: C1]; isto vencedor o candidato 1, etc. 5.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Problema (cont.):
5. Passados 10 segundos, mostrar os candidatos em ordem de preferncia decrescente : [+Vot: C1,C3,C2,N] Esperar por tecla ser premida. Se tecla for:

a. Enter: reiniciar o processo a partir do passo 1; b. Qualquer seta:voltar ao passo 4 (mostrar vencedor) c. Qualquer outra: ingnorar ( claro que no possivel ignorar: HALT, SSTEP, BREAK. Porqu?) Resolver o problema: (i) representar o diagrama de sestrutura, (ii) Uma vez que o problema se afigura relativamente complexo, dividlo em mdulos, devendo representar os respectivos algoritmos em fluxograma ou diagrama de NS, etc. (iii) Escever o programa (incluir: endereos, cdigos, rtulos, mnemnicos/operandos, 6.? comentrios). S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Rotina principal (ex: Menu)

HL-topo de bloco B-num votos

Receber o vector Votos[]

Calcular Frequencia Relativa

Ordenar Candidatos

Mostrar o Vencedor no LCD

Mostrar resultado Eleitorar

Esperar miliseg

Esperar 1 milisegundo
7.?
S
A

Eng.Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Chamada a uma subrotina. Implicaes e precaues;

Para chamar explicitamente a uma subrotina usa-se a instruo call. Entretanto h subrotinas especiais, as rotinas de servio de interrupo as quais so chamadas implicitamente quando h uma interrupo de hardware ou so chamadas explicitamente com o uso das instrues RST n (interrupes de software) . Examinaremos tais instrues no tema sobre modos de interrupo.
Chamada incondicional a uma subrotina: CALL address; exemploS: CALL 421Ah; CalcularMedia; CALL

onde address um endereo de 16 bits ou um rtulo cujo endereo de 16 bits ser resolvido a seu tempo pelo assemblador (software ou manual); 8.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Chamada a uma subrotina. Implicaes e precaues;

Chamada condicional a uma subrotina: CALL cond, address; onde cond uma condio testadora de flag (C, NC, P, M, Z, NZ, PE, PO); e address um endereo de 16 bits ou um rtulo cujo endereo de 16 bits ser resolvido a seu tempo pelo assemblador (software ou manual);

9.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Chamada a uma subrotina. Implicaes e precaues;


Implicaes

Quando se chama a uma subrotina acontece o seguinte (veja os detalhes das instrues CALL no manual): O Z80 salva na pilha o actual conteudo do PC (endereo da prxima instruo); este salvamente consiste na execuo implicita de PUSH PC (instruo que no existe como tal), que dec SP; (SP) PCH; dec SP; (SP) PCL
Passa para o PC o endereo contido no operando da instruo CALL; assim, O controle transferido para a subrotina especificada pela CALL; O cdigo da subrotina executado, usando, como no poderia deixar de ser, os registos da CPU bem como a memria e eventualmente as unidades de I/O; Como fim da subrotina, econtrada a instruo RET; assim, O PC salvo na pilha restaurado; isso consiste na execuo implcita de POP PC (instruo que no existe como tal), que : PCL (SP); inc SP; PCH (SP); inc SP;

Desta forma o controle devolvido ao programa que chamou a subrotina, continuando sua execuo normal;
S

10.?
N

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Chamada a uma subrotina. Implicaes e precaues;


Preacaues

Tendo em conta a lista de implicaoes, nomeadamente, a destruio eventual dos contedos dos registos da CPU incluindo especialmente o registo das flags, bem como eventualmente a memria, deve-se ter precaues de salvguardar os registos e locais de memria que o programa chamador supe no haverem sido modificados. Excepo vai para o uso de algum registo ou local de memria como varivel de retorno da subrotina que foi chamada.
Assim devem ser observadas as precaues seguintes: 1. Antes de chamara a subrotina salvar (com PUSHes ) para a pilha os valores de registos e/ou locais que se sabe sero transformados pela subrotina e cujos valores se pretende recuperar mais tarde. Tais casos podem ser os das variveis de retorno;

2. Depois de chamar a subrotina e usar convenientemente os valores de retorno, restaurar os registos/locais salvos na pilha, na ordem inversa;
3. Na subrotina, as primeirssimas instrues devem ser para salvar o rol de registos e locais a serem usados pela subrotina. As derradeiras instrues antes do RET devem ser para restaurar os tais registos/locais acima, ordem inbversa.
A

11.?
N

Eng.Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

Chamada a uma subrotina. Implicaes e precaues;


Preacaues (cont.)
Assim, o layout da subrotina deve ser:
Inicio: ; inicio da subrotina

push AF; salva o acumulador e registo das bandeiras;


push BC; supondo que B ou C ou BC vao ser usados

push pp; onde pp par de registos


;...

; ...
pop pp; isto reastaurar na ordem inversa pq pilha de acesso LIFO

pop BC;
pop AF;

Fim:

ret;

Este trabalho de salvamento/restaurao s exclui variveis de retorno;

12.?
S
A

Eng.Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly

EXERCCIOS
1. Propor os fluxogramas para os mdulos do diagrama de estrutura dado acima; 2. Dos fluxogramas desenhados, escolher pelo menos 2 e passlos para programas em assembly do Z80.

13.?
S
A

Eng.Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly Programao bsica em assembly do Z80

Bibliografia
1. Leventhal and Saville. Z80 Assembly Language Subroutines 1983

2.
3. 4. 5. 6.

L.Leventhal, Z80 Assembly Language Programming (Chap.3). Osborne/McGrawHill


Rodnay Zaks - Programming the Z-80 3rd Edition, SIBEX, ISBN: 0-89588-094-6 Zilog, Z80 Family CPU User Manual (www.zilog.com/docs/z80/um0080.pdf) http://www.msxarchive.nl/pub/msx/mirrors/msx2.com/zaks/z80prg02.htm http://www.z80.info;

7.
8. 9.

http://guide.ticalc.org/download/z80.txt
2500AD Macro Assembler Language Manual (*) Feedback, MAT980 Microprocessor Applications Trainer (*)

Nota: (*) Econtre-os no Laboratrio de E.Digital do DEEL ou noutras fontes.


14.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly


Trabalho prtico 2 (p/1.Sem.2013 - A apresentar at 24/05/2013)
Problema: Pretende-se calcular e guardar as notas de frequncia e respectivas
classificaes, bem como outras informaes, no MAT980. Assim, o programa dever:

1. Receber do usurio e conservar o nmero N de estudantes [1 ; 10] a processar.


Caso N estiver fora deste intervalo, terminar o programa despedindo-se com a

mensagem Adeus! no LCD;


2. Caso N esteja dentro do intervalo 1 a 10, exibir um menu para escolher as opes

abaixo listadas [entre parentesis rects o que deve aparecer no display], mostrando
por default a opo a [A: Input T1,T2]. Teclando as setas para cima ou para baixo

o programa deve alterar a opo actual do menu, conforme. Teclando enter sobre
uma dada opo do menu, a respectiva subrotina deve ser executada passando os

devidos parmetros. Quando a subrotina termina, retorna-se ao menu, mostrando


a ltima opo. Deve-se ter em ateno os valores retornados.

15.?
S
A

Engenharia Informtica - Microprocessadores 2013

Z80. Programao Bsica em Assembly


Trabalho prtico 2(cont.) As opes so: a. Receber do usurio e guardar as notas dos testes T1 e T2 dos N estudantes. Conservar os topos de bloco dos vectores T1 e T2. Menu: [A. Input T1,T2]; b. Calcular (arredondando por execesso) e guardar as notas de frequencia Nf. Menu: [B. Calcular Nf]; c. Classificar cada estudante com as letras E (excluido => Nf <10), A (admitido => Nf: ]10; 14[ ) e D (dispensado => Nf 14 ). Menu: [C. Class:E.A.D]; d. Calcular e guardar o numero de negativas. Menu: [D. Contar Neg]; e. Calcular e guardar o numero de positivas. Menu: [E. Contar Pos]; f. Calcular e guardar o numero de dispensas. Menu: [F. Contar Disp]; g. Calcular e guardar a freq.relativa das notas de 0 a 20. Menu: [G. Calc.FrRelat]; h. Mostrar numa mesma linha do LCD o Num (do aluno) ,T1, T2, Nf, Res; segundo o formato seguinte: [01-12,16,14,D]. ]. Teclando as setas para cima ou para baixo o programa deve alterar o nmero do estudante a mostrar e actualizar o display conforme. Teclando enter esta subrotina termina, retornando ao menu, mostrando a ltima opo: Menu: [D. Disp.Results].
Resolva o problema enunciado nesta ficha, como teu trabalho prtico, devendo: (i) representar o diagrama de sestrutura, (ii) tomar para si a(s) parte(s) do problema conforme definido na lista anexa e, representar o(s) respectivos(s) algoritmo(s) em fluxograma ou diagrama de NS, etc. (iii) Escever e testar o programa (incluir: endereos, cdigos, rtulos, mnemnicos/operandos, comentrios); (iv) Escrever 16.? e apresentar o relatrio do trabalho.
S
A

Engenharia Informtica - Microprocessadores 2013