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 5 - Apresentação do compilador AZ80 para o ZX Spectrum.



Anterior  Indice   Seguinte

   O utilitário AZ80 tem como função converter as instruções ASM do Z80 em código binário. Esse código binário  é o único que o CPU é capaz de executar. Para auxiliar a criação dos programas o compilador AZ80 possui um conjunto de palavras reservadas, chamadas directivas. A seguir vamos enumerar algumas das mais importantes.
  • ORG - Esta directiva é usada para definir o endereço de inicio do programa, esse endereço vai ser usado para carregar o programa na memoria do computador.
  • DB - Define Byte, permite colocar dados no programa, o compilador copia os dados que se seguem à directiva DB e coloca-os no código binário que está a gerar.
  • DW - Define Word, o termo WORD significa PALAVRA e refere-se a 1 numero binário de 16 bits. Esta directiva é semelhante à directiva DB com a diferença que desta feita são copiados 2 bytes de forma a perfazer os 16 bits. Esta directiva é muito importante quando queremos criar tabelas de endereços de memoria.
Estas 3 directivas são as mais importantes para se fazer um programa. Na Lição 2 vimos que em cada endereço de memoria só podemos guardar 1 byte e vimos também que com 1 byte só é possível representar números de 0 a 255. Pois bem as esses 256 valores (0 a 255)  foi atribuído um símbolo (caracter) para podermos memorizar texto no computador. Assim quando queremos guardar a letra "A" na memoria do computador, estamos na realidade a guardar o numero que lhe foi atribuído. Uma empresa americana criou uma tabela chamada ASCII (American Standard Code for Information Interchange, que em português significa "Código Padrão Americano para o Intercâmbio de Informação") com o objectivo de definir um padrão para ser usado em todos os computadores para tornar possível a troca de informação. Podemos ver no quadro abaixo indicado, a correspondência existente entre os códigos e os caracteres definidos na tabela ASCII.

TABELA ASCII
Código Caracter Código Caracter Código Caracter
32 Espaço 64 @ 96 `
33 ! 65 A 97 a
34 " 66 B 98 b
35 # 67 C 99 c
36 $ 68 D 100 d
37 % 69 E 101 e
38 & 70 F 102 f
39 ' 71 G 103 g
40 ( 72 H 104 h
41 ) 73 I 105 i
42 * 74 J 106 j
43 + 75 K 107 k
44 , 76 L 108 l
45 - 77 M 109 m
46 . 78 N 110 n
47 / 79 O 111 o
48 0 80 P 112 p
49 1 81 Q 113 q
50 2 82 R 114 r
51 3 83 S 115 s
52 4 84 T 116 t
53 5 85 U 117 u
54 6 86 V 118 v
55 7 87 W 119 w
56 8 88 X 120 x
57 9 89 Y 121 y
58 : 90 Z 122  z
59 ; 91 [ 123 {
60 < 92 \ 124 |
61 = 93 ] 125 }
62 > 94 ^ 126 ~
63 ? 95 _ 127 (c)

   Na tabela ASCII só apresentámos os códigos de 32 ao 127. O motivo para tal deve-se ao facto que os restantes códigos são pouco usados, porque ou são códigos de controle de impressão, ou são sinais de acentuação das letras e portanto não são utilizados para mostrar texto. Os chineses têm um provérbio que diz "uma imagem vale mil palavras", seguindo essa máxima e para clarificar as ideias sobre programação, vamos apresentar um exemplo dum programa onde é visível o código criado pelo AZ80 após compilar as instruções ASM. Na coluna da esquerda temos o programa e na da direita o respectivo código produzido pela compilação.

PROGRAMA CÓDIGO
Linha Instrução Endereço Bytes
       
1 ORG 1000 1000 nenhum
2 INC A 1000 60
3 AND B 1001 160
4 ADD HL,DE 1002 25
5 RET 1003 201
6 DB "z" 1004 122
7 DB 64 1005 64

   Através da observação do quadro anterior podemos ver que o programa foi codificado em 6 bytes,  cada instrução gerou 1 byte. No tocante à directiva DB  foram usados dois modos de definir dados. Na linha 6 do programa definimos a letra "z" (código ASCII 122) enquanto que na linha 7 definimos o numero 64. A directiva DB é a única que permite introduzir texto num programa através do uso das aspas (""). Este processo foi criado para simplificar a introdução de texto nos programas pois deixa de ser necessário indicar o código ASCII correspondente a cada letra ou símbolo.
   Continuando o curso vamos fazer uma explicação resumida do programa mostrado acima:
  • Linha 1: Org 1000 - Informa o AZ80 que o programa deve ser compilado para ser carregado no endereço 1000 da memoria. Esta linha não produz código executável. 
  • Linha 2: INC A - Incrementa o registo A, ( A=A+1). Esta instrução gera o código binário 60. Esse byte é colocado no endereço 1000. Como já foi dito noutra lição, o CPU executa o programa por ordem crescente, quer dizer do endereço menor para o endereço maior.
  • Linha 3: AND B - É feita a operação lógica AND entre o registo B e o A, (A=A AND B). O resultado é guardado no registo A. Esta instrução é codificada com o numero 160 e é colocada no endereço 1001.
  • Linha 4: ADD HL,DE - O registo DE é adicionado ao registo HL, (HL=HL+DE). O código desta operação é o 25 e é guardado no endereço 1002.
  • Linha 5: RET - É executado 1 retorno. Esta instrução produz o código 201 e ocupa o endereço de memoria 1003.
  • Linha 6: DB "z" - Define a letra "z", o compilador converte a letra no respectivo código ASCII 122 e coloca-o no endereço 1004.
  • Linha 7: DB 64 -  Define o numero 64. Neste modo de definir dados é copiado o valor indicado a seguir à directiva DB, não sendo necessária qualquer conversão. Portanto o numero 64 é colocado no endereço 1005.
   Ainda falta-nos falar dum assunto importante. Na linguagem ASM usam-se TAGS (rótulos) para substituir os endereços físicos (com números). Este procedimento tem como objectivo tornar mais fácil perceber e alterar os programas. O primeiro caracter do nome só deve conter letras e símbolos, enquanto que os restantes podem utilizar também números. Além disso o nome deve terminar sempre com o sinal ":". O AZ80 no momento da compilação converte todos os rótulos em endereços de memoria libertando o programador dessa tarefa cansativa. Exemplos de rótulos validos:

   print:
   a234:
   #vidas:

   Outro aspecto da linguagem ASM refere-se à inserção de comentários nos programas. Para essa finalidade devemos utilizar o sinal ";" seguido do texto que queremos colocar. A inserção de comentários nos programas tem como finalidade torna-los mais fáceis de entender. Por exemplo:

   ; Isto é uma linha de comentário.
   XOR A ;Os comentários também podem ser colocados depois das instruções.

   Por ultimo queremos falar sobre a directiva EQU  (da palavra inglesa EQUATE) que é usada para definir constantes numéricas necessárias nos programas. As instruções ASM podem utilizar essas constantes com se de números se tratasse. Vejamos um exemplo:

#vidas EQU 25 Atribuimos o numero 25 à constante vidas.
LD A,#vidas Carregamos o registo A com o valor da constante #vidas.
LD A,25 Esta instrução faz exactamente o mesmo que a anterior com a diferença que usa o numero 25 em vez da constante #vidas.

   À semelhança dos rótulos,  as constantes numéricas são também convertidas para números no momento da compilação dum programa. Bem para terminar esta lição resta-nos ainda dizer que o texto com o qual fazemos os programas é chamado de código fonte e que depois de ser compilado passa-se a chamar código binário ou executável.


Próxima Lição - Criação do primeiro programa para o ZX Spectrum.


Anterior  Indice   Seguinte






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