Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Microprocessadores
Z80. Programao Bsica em Assembly.
SUMRIO
A. Programas complexos. Diviso em mdulos (programao modular):
B.
MAT980.
C. Exerccios;
D. Referncias bibliogrficas.
2.?
S
A
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
4.?
S
A
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
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
Ordenar Candidatos
Esperar miliseg
Esperar 1 milisegundo
7.?
S
A
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
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
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
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
; ...
pop pp; isto reastaurar na ordem inversa pq pilha de acesso LIFO
pop BC;
pop AF;
Fim:
ret;
12.?
S
A
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
Bibliografia
1. Leventhal and Saville. Z80 Assembly Language Subroutines 1983
2.
3. 4. 5. 6.
7.
8. 9.
http://guide.ticalc.org/download/z80.txt
2500AD Macro Assembler Language Manual (*) Feedback, MAT980 Microprocessor Applications Trainer (*)
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
15.?
S
A