ZX-BATTLE
CURSO DE PROGRAMAÇÃO
BASIC
C++
PASCAL
 
 
 
OUTROS
Envie-nos as suas duvidas ou questões!
 
 
 
LINKS
 
Inicio Curso
Inicio Site
 
 
 

PROGRAMAÇÃO ASM

Lição 3 - Inicio do estudo do Z80



Anterior  Indice   Seguinte

   Vimos na lição anterior que o CPU escreve e lê dados na memoria do sistema. Nesta lição vamos aprofundar mais esse tema, estudando o CPU Z80 que é utilizado no computador ZX Spectrum. Todos os microprocessadores (CPU's) possuem um certo numero, maior ou menor, de memorias internas chamadas registos, de modo a auxiliar  a execução dos programas. Cada registo tem uma função e um tamanho especifico dependendo do tipo de CPU e da família a que pertence.  Ao contrario da memoria do sistema os registos são identificados por letras e não por números.  Em todos os CPU's existe um registo chamado de FLAGS que tem como função assinalar determinados estados do Acumulador (registo A) após a execução das instruções aritméticas e lógicas.
   Para tornar tudo isto mais claro vamos analisar um CPU real, o Z80. Neste CPU podemos encontrar os seguintes registos:
  • AF - A (Este registo é também chamado de acumulador  porque os cálculos aritméticos e lógicos são sempre feitos entre ele e os outros registos ou entre ele e a memoria. Este registo tem um tamanho de 8 bits. Junto ao registo A temos o F   que é o registo de flags já falado anteriormente, voltaremos a ele mais à frente no curso. O registo F também tem 8 bits de comprimento  e juntamente com o registo A formam um total de 16 bits. 
  • BC -  Este registo é de uso geral e tem um tamanho de 16 bits, pode ser usado só o B ou C, tendo cada um 8 bits de largura. O B corresponde aos 8 bits de maior peso e o C aos 8 bits de menor peso.
  • DE - Este registo é exactamente igual ao registo BC.
  • HL - O mesmo acontece com este registo, também se podem usar as metades H e L separadamente.
  • SP - Este registo chama-se Stack Pointer em inglês, Ponteiro da Pilha em português e serve para guardar na memoria os endereços de retorno das rotinas. O registo SP tem uma dimensão única de 16 bits e não pode ser usado parcialmente.
  • PC - Este registo é designado por Program Counter em inglês, Contador do Programa em português e é utilizado para fornecer o endereço de memoria onde se encontra a próxima instrução do programa a ser executada. É também um registo só de 16 bits, não podendo ser dividido em duas metades de 8 bits.
   Alem destes registos existe ainda outro conjunto alternativo de registos AF',BC',DE',HL', que podem ser utilizados pelos programas. A fig.5 mostra a totalidade dos registos do CPU Z80.

   Na fig.6 apresentamos os pinos do CPU Z80 e os respectivos sinais eléctricos associados. Quando as setas apontam para o rectângulo significa que são sinais de entrada, se apontarem para fora são sinais de saída. É o caso do barramento de endereços onde os sinais são todos de saída.

   Quando se diz que um sinal é de saída significa que é o CPU que produz o sinal. Se for um sinal de entrada então o CPU actua como carga e cabe ao circuito externo fornecer o sinal. Outro aspecto a ter em atenção diz respeito ao traço que se encontra por cima dos nomes dos pinos. Esse traço indica que os sinais são activos a zero volts, quer dizer ao nível binário "0". Assim para fazermos "RESET" ao microprocessador temos que colocar esse terminal a zero volts. O mesmo se aplica a todos os outros terminais que têm um traço no nome.
   Depois desta pequena aula de electrónica vamos continuar o curso com uma breve explicação sobre o modo como o CPU actua quando ligamos o computador.  Assim que ligamos o sistema à  electricidade é feito o RESET (este termo significa por tudo a zero) do CPU, isso tem como efeito imediato a colocação a zero do registo PC . Como vimos mais atrás o registo PC contem o endereço da próxima instrução do programa a ser executada, logo é pelo endereço zero que começa a execução do programa. Pelo que foi dito sobre as memorias, percebe-se que só se pode usar uma memoria ROM nesse endereço porque é a única que conserva os dados enquanto o computador estiver desligado. Assim é de facto , a memoria ROM é colocada no endereço zero e os endereços seguintes são preenchidos com a memoria RAM. Na Fig.7 é mostrado o mapa de memoria usada pelo ZX Spectrum 48K.


   Ao longo do curso vamos usar prioritariamente o sistema decimal de numeração e só em casos excepcionais os números binários ou hexadecimais. Como se pode ver na Fig.7 os primeiros 16KB são constituídos por uma memoria ROM, depois seguem-se mais 16KB de memoria RAM e por fim 32KB, também de memoria RAM.  O programa de arranque do computador está gravado na memoria ROM porque é a única que não perde os dados quando se desliga o sistema. No total temos 64KB de memoria, essa é a quantidade máxima de memoria que o CPU Z80 pode endereçar porque o seu barramento de endereços só tem 16 linhas (bits). Fazendo as contas verificamos que realmente é esse o limite de memoria para o Z80. Assim temos  2e16=65536 posições de memoria, para saber os KB dividimos o valor calculado atrás por 1024 (1024 é o valor dum 1KB) portanto dá 65536/1024= 64Kb.
    Neste momento o leitor deve-se estar a perguntar, se o Z80 só pode endereçar 64KB, como é possível usar a totalidade da memoria dos modelos ZX Sectrum +2 e +3 que têm precisamente 128KB. Bem, nesses modelos foi criado um mecanismo de hardware que divide os 128KB em blocos de 16KB cada, chamados bancos de memoria.  Através do software é possível seleccionar 1 conjunto de 4 blocos de memoria simultâneos, de modo a  perfazer os tais 64KB de memoria total.


Proxima Lição - Estrutura básica das instruções ASM do Z80.


Anterior  Indice   Seguinte






P
U
B
L
I
C
I
D
A
D
E
Copyright 2005-2022 ZX-BATTLE. Todos os direitos Reservados