| Ci sono errori dovuti all'inesperienza
e all'ignoranza delle regole
(normalissima in tutti noi, nelle prime fasi di apprendimento) che bloccano
il processo di creazione del nostro eseguibile, impedendo al compilatore di
proseguire; vediamo di
elencare i più probabili e comuni:
| gli operandi numerici delle
istruzioni sono numeri binari espressi di norma in esadecimale; quelli a
8 bit vanno da 00H a FFH,
quelli a 16 bit da 0000H a
FFFFH.
Il problema sta nel fatto che, a noi sembra ragionevole scriverli così
come abbiamo appena fatto, dopo la virgola, nell'istruzione; ma
l'assemblatore non ne vuole sapere: dopo MOV
AX,FFFFH segnala errore!
test01.ASM(5): error A2009: Symbol not defined:
FFFFH
0 Warning Errors
1 Severe Errors |
L'istruzione deve essere corretta con
MOV AX,0FFFFH:
la fredda logica dell'assemblatore ha
colpito ancora: per esso FFFFH
non è un numero ma un'etichetta
e come tale segnala errore perchè questo simbolo non esiste (nessuno lo
ha definito, nel programma sorgente).
|
|
Ricorda:
i numeri esadecimali che cominciano per lettera (per esempio A5H
o FFFFH)
devono essere scritti con uno 0 davanti (0A5H
o 0FFFFH);
solo così l'assemblatore li riconosce come numeri (ed evita di
segnalare errore...) |
| un altro errore che non perdona è il
banale scambio di una O per uno
0; tutti prima o poi ci cascano e, per
la fretta scrivono, per esempio, MOV
AL,OOH:
test02.ASM(5): error A2009: Symbol not defined: OOH
0 Warning Errors
1 Severe Errors |
Naturalmente dovremo scrivere MOV
AL,00H; l'errore è dello stesso tipo
del precedente: l'assemblatore ha preso (giustamente) il nostro
"numero" per un'etichetta
e segnala errore perchè il simbolo
OOH non esiste (nessuno lo
ha definito, nel programma sorgente).
|
| le istruzioni vanno imparate con pazienza
e determinazione; bisogna ricordarsi che talune di esse lavorano con
operandi predefiniti; così, per esempio, una situazione all'inizio
piuttosto frequente è quella di passare operandi a 8 bit a istruzioni
che trattano con quelli a 16 bit (come per esempio PUSH e POP);
l'istruzione PUSH AL genera errore:
test03.ASM(5): error A2058: Byte register illegal
0 Warning Errors
1 Severe Errors |
deve essere corretta con
PUSH AX,
e lo stesso vale per POP. |
|