|
PROGRAMAÇÃO
ASM
Lição
6 -
Criação do primeiro programa para o ZX Spectrum.
|
Anterior Indice Seguinte |
Nesta
lição vamos finalmente criar um programa ASM para
o ZX Spectrum. O programa em causa não faz grande coisa mas
serve para mostrar como se aplicam na pratica os conhecimentos
teóricos adquiridos ate aqui. Vamos começar por
fazer um programa que visualiza uma mensagem no ecran.
|
ORG |
40000 |
;O programa
começa no
endereço 40.000. |
START: |
LD |
A,2 |
;A
execução começa aqui. Carrega o
Registo A com o numero 2. |
|
CALL |
5633 |
;Chama
a rotina do sistema usada para abrir os canais. O nº do canal
;é
indicado no registo A, neste caso é o 2, este canal
é usado
;para visualizar texto no ecran do ZX
Spectrum. |
|
LD |
HL,MSG |
;Carregamos
o registo HL com o endereço da mensagem. |
LOOP: |
LD |
A,(HL) |
;Carregamos o registo A
com o
código ASCII que vamos visualizar.
;Esse
código encontra-se no endereço apontado pelo
registo HL. |
|
INC |
HL |
;Incrementa
o registo HL. HL contem o endereço do próximo
;caracter
da mensagm. |
|
AND |
A |
;Verifica
se o código ASCII é zero, caso afirmativo termina
o programa. |
|
RET |
Z |
;Esta
é uma das varias formas usadas por uma
instrução condicional, só
;é
executada se a flag Z for 1. A flag Z é colocada a 1 se o
resultado do
;ultimo calculo no registo A for zero. |
|
RST |
16 |
;Chama a rotina do
sistema encarregue de
visualizar o texto no
;ecran. O código ASCII do
caracter deve ser fornecido no registo A. A
;instrução
RST 16 executa a mesma função que a CALL mas
só pode
;ser usada para 8 endereços de
memoria fixos, não permitindo chamar
;rotinas
noutros endereços. Tem a vantagem de ser pequena e
rápida. |
|
JP |
LOOP |
;Salta
para trás para o rotulo LOOP, permitindo repetir o programa
até
;atingir o fim da mensagem.
|
;Depois
de escrevermos as instrucoes ASM vamos
definir com a directiva DB a mensagem que
;queremos mostrar.
|
MSG: |
DB "O
maravilhoso mundo
da programacao ASM, onde os sonhos se tornam"
DB "
realidade!",0
|
;Como
se pode ver a mensagem termina com o numero zero. Esse valor foi
escolhido porque
;na tabela ASCII não é
usado para representar texto, estando portanto livre para
qualquer
;função que lhe queiramos dar,
que neste caso é assinalar o fim da mensagem. |
Vamos
mostrar só mais uma vez
o código binário produzido pelo compilador AZ80.
Observe o quadro que se segue:
A partir do quadro acima mostrado,
podemos verificar que os rótulos foram
substituídos pelos endereços correspondentes e
que as instruções ASM
têm tamanhos variados. As instruções
maiores têm 3 bytes de extensão; é o
caso do JP, CALL e da
LD HL, enquanto que as menores têm somente 1 byte
de tamanho. Podemos ver ainda que o texto foi codificado usando os
valores da tabela ASCII e também que o
código do texto aparece depois do código
executável exactamente no ponto em que foi definido no
programa.
O compilador AZ80
usa o rotulo START para definir o
endereço de execução do programa. Esse
rotulo pode ser colocado em qualquer parte do código
executável dependendo unicamente do modo como queremos fazer
o programa. Além do rotulo START o AZ80
usa também algumas constantes para
definir a data em que foi compilado o programa, são elas as
seguintes:
- <dd>
equ 20 - Define o Dia
- <mm>
equ 01 - Define o Mes
- <yy>
equ 2009 - Define o Ano
Para
compilar um programa com o AZ80 devemos indicar o
seu nome na linha de comandos além de algumas
opções adicionais. Suponhamos que o programa se
chamava "print", então
para compila-lo devemos escrever "AZ80.COM -cod -all
print.tap print.txt". Como se pode ver no exemplo
dado, foram usadas as opções -cod
e -all. Chegou pois o momento certo para explicar
as suas funções.
O ZX Spectrum
trás de fabrica, gravado na memoria ROM
um interpretador de linguagem BASIC,
portanto é através dessa linguagem que
vamos carregar os nossos programas ASM. Para esse efeito dispomos de 2
comandos BASIC que são os seguintes:
- LOAD "" - Carrega e executa
um programa
BASIC.
- LOAD "" CODE - Carrega
somente um bloco de dados que pode ser um programa ou não.
Para executar o programa ASM temos que usar o
comando USR
Endereço_de_Execução.
Vamos ver agora as
opções do AZ80 relacionadas
com o formato do código executável criado. Assim
temos:
- -bas - Cria 2
programas, o primeiro em BASIC é usado
para carregar e executar o segundo que contem o código
maquina produzido pelo programa ASM. Com esta
opção basta escrever o comando LOAD ""
e automaticamente o nosso programa é carregado na
memoria e executado de seguida.
- -cod
- Cria somente o programa executável. Para
corrê-lo temos que escrever no ZX Spectrum os comandos CLEAR
endereço_inicio_programa - 1, LOAD "" CODE e RUN
USR endereço_de_execução_programa.
Existem mais
opções mas por agora não vamos falar
delas, no entanto pode consulta-las no manual do AZ80. Pode
também fazer os downloads dos programas
necessários para praticar os exemplos dados no curso, nos
links indicados a seguir:
Bem , chegamos ao fim desta
lição. Vamos nas próximas
lições estudar em profundidade todas as
instruções do CPU Z80 de modo
a preparar-nos melhor para o desenvolvimento dos programas. |
Próxima
Lição - As
instruções lógicas AND, OR e XOR. |
Anterior Indice Seguinte
|
|
P
U
B
L
I
C
I
D
A
D
E
|