Newsgroup: it.hobby.elettronica.digitale
Titolo: 172: (12) 8-bit displacement overflow

Ciao, a tutti del NG mi domando e dico un povero programmatore (si fa per dire...)
quando incappa in un errore del genere come fa ad uscirne fuori???? (vedi oggetto!)
nel senso, sto mettendo insieme un programma per l'ST6 e durante la compilazione mi viene fuori suddetto errore:
172: (12) 8-bit displacement overflow
mi basterebbe che qualche anima pia dasse qualche delucidazione! 
ho dove posso andare a recuperare un qualche cosa con l'elenco degli errori!
grazie per l'attenzione.
Ciao, Antonio.
Antonio R. '70, alias(MATRIX).
Buttuato fuori dalla porta rientrato dalla window...
mailto:
anton...@tiscalinet.it
la mia HP: 
http://wow.freeweb.org/
************************************************************
That's all folks!

Ciao, Antonio.
Probabilmente c'e' un JRR o un JRS che salta troppo lontano.
Se hai una linea del tipo :
	JRR 0, a, xxx
	... resto del programma...
La sostituisci con
	JRS 0, a, yyy
	JP xxx
yyy	... resto del programma ...
Ciao, Massimo - IW1FDX
E-Mail    
max...@libero.it
Visita la pagina dedicata ai microcontrollori ST62
all'indirizzo 
http://digilander.iol.it/max4000

 172: (12) 8-bit displacement overflow
 
E'l'errore piu' tipico che possa fornire un assembler cosi'semplice!.
Ed e' anche fastidioso, di solito appare dopo aver "allungato" un codice
gia' perfettamente funzionante.
Esso dovrebbe capitare con un'istruzione di test-bit-salto, infatti
nell'ST6 solo le istruzioni JRR e JRS usano l'8 bit displacement.
Ovvero: l'istruzione deve saltare ad una locazione di programma che
dista piu' di 128 bytes da essa (il "displacement" e' espresso su 8 bit,
cioe' con un numero da -128 a +127 in complemento a due).
Infatti nel codice operativo di TUTTE le istruzioni di salto RELATIVO
non compare la destinazione per esteso, ma indicata come "displacement"
o "offset" da sommare al valore attuale del contatore di programma.
Perche? Indicando un valore "relativo" si possono risparmiare alcuni bit
nel codice macchina dato che i "salti vicini" sono piu' frequenti di
quelli "lontani". Le istruzioni di salto relativo sono anche rilocabili,
ma questo vantaggio non serve se il programma e'in ROM come gli ST6. 
Nota: nell' ST6 la memoria programma (4Kbyte) si indirizza con 12 bit
(2^12=4096), quindi le istruzioni di salto ASSOLUTO riservano 12 bit per
l' indirizzo.
Nell'ST6 i salti RELATIVI usano displacement differenti:
5 bit (-15/+16)  per le JRZ JRNZ JRC JRNC
8 bit (-127/+128) per la JRR JRS
Quando elabora le JRR JRS JRZ JRNZ JRC JRNC, l' assembler deve calcolare
la DISTANZA con segno del salto (displacement) e scriverla nel codice
macchina. Se la distanza, espressa in binario, supera il numero di bit
concesso dal set d'istruzioni, l'assembler emette l' errore
"displacement overflow", dato che non puo' fare altro. Infatti gli ST6
NON hanno istruzioni alternative di test-e-salto-assoluto,  tipo JPR JPS
JPC JPNC ... che potrebbero saltare ovunque nella memoria di programma.
Soluzione 1): modifica la tua routine in modo da "ridurre il salto".
Soluzione 2): inverti il test (scambiando JRR con JRS e viceversa)
usandolo per "saltare oltre alla istruzione successiva" ed aggingi
subito dopo un salto assoluto incondizionato (JP) alla locazione voluta.
Potrai trovare riscontro a tutto cio'nella descrizione del set
d'istruzioni dell' ST6.