Citazione:
Originalmente inviato da Milus in effetti non capisco come faccia l'assembler
a capire che con il primo org intendo lavoare sulla ram e con il secondo
nella program memory... |
In effetti non serve che lo capisca... quando definisci una variabile tu in realtà definisci l'indirizzo (cioè la cella di memoria) della variabile in cui scriverai e leggerai dei valori. Quando usi ad esempio l'istruzione movf xx,w il processore sa che deve prendere il valore contenuto nella locazione xx e metterlo nel registro w. Sono le istruzioni che usi che interpretano il valore come una locazione di memoria o una locazione di programma, non l'assemblatore!
Per definire le variabli hai tanti modi:
definire il valore assoluto di ogni variabile (dici tu dove è la variabile):
1) Dato EQU 0x12 vuol dire che la variabile Dato è nella locazione di memoria (dati) n. 0x12. sistema assolutamente sconsigliato.
2) Definire con ORG 0x0C l'inizio dell'area dati ed elencare le variabili specificando la direttiva RES n che riserva una o più locazioni di memoria
es:
ORG 0x0C ; inizio file register
Dato_1 res 1 ;locazione 0x0C
Dato_2 res 1 ;locazione 0x0D
... ecc. sistema comodo, ma non ottimale
3) Usare le direttive CBlock/endc che definiscono l'area variablili e che permettono di associare il nome delle variabili alle finestre di watch per il debug e permettono di creare una lista di simboli che aiuta nel debug del software. Es.
CBlock 0x0C ;inzio blocco
Dato_1
Dato_2
Dato_3
...
Dato_N
endc
Altro consiglio: invece di ridefinire i registri di sistema, includi il file del processore che stati usando (o quello generico pic.inc nelle ultime versioni) che contiene già tutti i nomi e gli indirizzi corretti dei registri per tutti i pic!
Michele