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