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 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
Copyright 2005-2022 ZX-BATLE. Todos os direitos Reservados