Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf
-
Upload
elias-eugenio-machava -
Category
Documents
-
view
292 -
download
11
Transcript of Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf
Microprocessadores
UEM – Faculdade de Engenharia
Departamento de Engenharia Electrotécnica
Curso de Engenharia Informática
Eng. DOHO, G. J
Secção de Sistemas Digitais
Z80. Programação Básica em Assembly.
A N
S
2.?
Z80. Programação Básica em Assembly
Engenharia Informática - Microprocessadores 2013
SUMÁRIO
A. Programas complexos. Divisão em módulos (programação
modular):
1. Chamada a uma subrotina. Implicações e precauções;
2. Exemplo(s).
B. Assemblagem por computador:
1. Software assemblador;
2. O processo de assemblagem e linkedição;
3. Formatos dos ficheiros executáveis;
4. Transferência do ficheiro executável, do PC para o Micamaster
MAT980.
C. Exercícios;
D. Referências bibliográficas.
A N
S
3.?
Z80. Programação Básica em Assembly
A - Programas complexos. Divisão em módulos (programação modular):
Já havíamos visto que no projecto lógico da solução de um problema através 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 módulos que resolvem tais partes diferentes do problema. Tais módulos serão as funções ou sub-rotinas 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 parâmetros de entrada e a lista de retorno, definindo claramente os registos da CPU e/ou os locais de memória que contêm tais parâmetros.
Engenharia Informática - Microprocessadores 2013
A N
S
4.?
Z80. Programação Básica em Assembly
A - Programas complexos. Divisão em módulos (programação modular – Cont.):
3. Desenhar um diagrama de estrutura (em blocos) que mostra a relação entre o programa principal e os seus subprogramas (sub-rotinas) indicando as variáveis 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 solução da sua parte do problema.
Engenharia Informática - Microprocessadores 2013
A N
S
5.?
Z80. Programação Básica em Assembly
Problema:
Pretende-se receber, calcular e guardar os votos e resultados eleitorais da eleição 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 escrutíneo: Calcular e guardar a frequencia relativa dos votos 1,2,3,X;
3. Colocar as frequências relativas em ordem decrescente.
4. Mostrar o vencedor: [Vencedor: C1]; isto é vencedor é o candidato 1, etc.
Engenharia Informática - Microprocessadores 2013
A N
S
6.?
Z80. Programação Básica em Assembly
Problema (cont.):
5. Passados 10 segundos, mostrar os candidatos em ordem de preferência 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 não é 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, dividílo em módulos, devendo representar os respectivos algoritmos em fluxograma ou diagrama de NS, etc. (iii) Escever o programa (incluir: endereços, códigos, rótulos, mnemónicos/operandos, comentários).
Engenharia Informática - Microprocessadores 2013
A N
S
7.?
Z80. Programação Básica em Assembly
Eng.Informática - Microprocessadores 2013
Rotina principal (ex: Menu)
Receber o vector Votos[]
HL-topo de bloco B-num votos
Calcular Frequencia
Relativa
Ordenar Candidatos
Mostrar o Vencedor
no LCD
Mostrar resultado Eleitorar
Esperar miliseg
Esperar 1 milisegundo
A N
S
8.?
Z80. Programação Básica em Assembly
Chamada a uma subrotina. Implicações e precauções;
Para chamar explicitamente a uma subrotina usa-se a instrução call. Entretanto há subrotinas especiais, as rotinas de serviço de interrupção as quais são chamadas implicitamente quando há uma interrupção de hardware ou são chamadas explicitamente com o uso das instruções RST n (interrupções de software) . Examinaremos tais instruções no tema sobre modos de interrupção.
Chamada incondicional a uma subrotina:
CALL address; exemploS: CALL 421Ah; CALL CalcularMedia;
onde address é um endereço de 16 bits ou um rótulo cujo endereço de 16 bits será resolvido a seu tempo pelo assemblador (software ou “manual”);
Engenharia Informática - Microprocessadores 2013
A N
S
9.?
Z80. Programação Básica em Assembly
Chamada a uma subrotina. Implicações e precauções;
Chamada condicional a uma subrotina:
CALL cond, address;
onde cond é uma condição testadora de flag (C, NC, P, M, Z, NZ, PE, PO); e address é um endereço de 16 bits ou um rótulo cujo endereço de 16 bits será resolvido a seu tempo pelo assemblador (software ou “manual”);
Engenharia Informática - Microprocessadores 2013
A N
S
10.?
Z80. Programação Básica em Assembly
Chamada a uma subrotina. Implicações e precauções;
Implicações
Quando se chama a uma subrotina acontece o seguinte (veja os detalhes das
instruções CALL no manual):
• O Z80 salva na pilha o actual conteudo do PC (endereço da próxima instrução);
este salvamente consiste na execução implicita de PUSH PC (instrução que não
existe como tal), que é dec SP; (SP) PCH; dec SP; (SP) PCL
• Passa para o PC o endereço contido no operando da instrução CALL; assim,
• O controle é transferido para a subrotina especificada pela CALL;
• O código da subrotina é executado, usando, como não poderia deixar de ser, os
registos da CPU bem como a memória e eventualmente as unidades de I/O;
• Como fim da subrotina, é econtrada a instrução RET; assim,
• O PC salvo na pilha é restaurado; isso consiste na execução implícita de POP PC
(instrução que não 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 execução normal;
Engenharia Informática - Microprocessadores 2013
A N
S
11.?
Z80. Programação Básica em Assembly
Eng.Informática - Microprocessadores 2013
Chamada a uma subrotina. Implicações e precauções;
Preacauções
Tendo em conta a lista de implicaçoes, nomeadamente, a destruição eventual dos
conteúdos dos registos da CPU incluindo especialmente o registo das flags, bem como
eventualmente a memória, deve-se ter precauções de salvguardar os registos e locais
de memória que o programa chamador supõe não haverem sido modificados. Excepção
vai para o uso de algum registo ou local de memória como variável de retorno da
subrotina que foi chamada.
Assim devem ser observadas as precauções seguintes:
1. Antes de chamara a subrotina salvar (com PUSHes ) para a pilha os valores de
registos e/ou locais que se sabe serão transformados pela subrotina e cujos valores
se pretende recuperar mais tarde. Tais casos podem ser os das variáveis 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 primeiríssimas instruções devem ser para salvar o rol de registos
e locais a serem usados pela subrotina. As derradeiras instruções antes do
RET devem ser para restaurar os tais registos/locais acima, ordem inbversa.
A N
S
12.?
Z80. Programação Básica em Assembly
Eng.Informática - Microprocessadores 2013
Chamada a uma subrotina. Implicações e precauções;
Preacauções (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/restauração só exclui variáveis de retorno;
A N
S
13.?
Z80. Programação Básica em Assembly
EXERCÍCIOS
Eng.Informática - Microprocessadores 2013
1. Propor os fluxogramas para os módulos do diagrama de estrutura
dado acima;
2. Dos fluxogramas desenhados, escolher pelo menos 2 e passálos
para programas em assembly do Z80.
A N
S
14.?
Z80. Programação Básica em Assembly
Bibliografia
1. Leventhal and Saville. Z80 Assembly Language Subroutines 1983
2. L.Leventhal, Z80 Assembly Language Programming (Chap.3). Osborne/McGrawHill
3. Rodnay Zaks - Programming the Z-80 3rd Edition, SIBEX, ISBN: 0-89588-094-6
4. Zilog, Z80 Family CPU User Manual (www.zilog.com/docs/z80/um0080.pdf)
5. http://www.msxarchive.nl/pub/msx/mirrors/msx2.com/zaks/z80prg02.htm
6. http://www.z80.info;
7. http://guide.ticalc.org/download/z80.txt
8. 2500AD Macro Assembler Language Manual (*)
9. Feedback, “MAT980 Microprocessor Applications Trainer” (*)
Nota: (*) Econtre-os no Laboratório de E.Digital do DEEL ou noutras fontes.
Engenharia Informática - Microprocessadores 2013
Programação básica em assembly do Z80
A N
S
15.?
Z80. Programação Básica em Assembly
Trabalho prático 2 (p/1º.Sem.2013 - A apresentar até 24/05/2013)
Problema: Pretende-se calcular e guardar as notas de frequência e respectivas
classificações, bem como outras informações, no MAT980. Assim, o programa deverá:
1. Receber do usuário e conservar o número 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 opções
abaixo listadas [entre parentesis rects o que deve aparecer no display], mostrando
por default a opção a [A: Input T1,T2]. Teclando as setas para cima ou para baixo
o programa deve alterar a opção actual do menu, conforme. Teclando enter sobre
uma dada opção do menu, a respectiva subrotina deve ser executada passando os
devidos parâmetros. Quando a subrotina termina, retorna-se ao menu, mostrando
a última opção. Deve-se ter em atenção os valores retornados.
Engenharia Informática - Microprocessadores 2013
A N
S
16.?
Z80. Programação Básica em Assembly
Trabalho prático 2(cont.) As opções são:
a. Receber do usuário 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 número do estudante a mostrar e actualizar o display conforme. Teclando enter esta subrotina termina, retornando ao menu, mostrando a última opção: Menu: [D. Disp.Results].
Resolva o problema enunciado nesta ficha, como teu trabalho prático, 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: endereços, códigos, rótulos, mnemónicos/operandos, comentários); (iv) Escrever e apresentar o relatório do trabalho.
Engenharia Informática - Microprocessadores 2013