Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

16
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.

Transcript of Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

Page 1: 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.

Page 2: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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.

Page 3: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 4: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 5: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 6: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 7: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 8: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 9: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 10: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 11: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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.

Page 12: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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;

Page 13: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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.

Page 14: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 15: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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

Page 16: Microproessadores - Z80.Programação-Assemblagem por Computador - Programaçao modular - V1.pdf

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