|
La scrittura di un sorgente ASM
non può fare a meno di definire variabili,
tabelle,
testi...
|
|
In ogni caso (EXE o COM) è il registro DS quello chiamato a puntare (e quindi localizzare) gli indirizzi delle etichette di variabili, tabelle, testi...o , più genericamente, dei dati del programma assembly. |
|
In conclusione:
|
|
Ma veniamo al nocciolo della discussione... | |||||||
Per una scelta personale
(probabilmente discutibile, come spesso
accade per le posizioni intellettuali schierate) ho deciso di utilizzare il segment-override
CS: per puntare,
all'interno dell'unico segmento
previsto dalla creazione di
eseguibili di tipo COM, le locazioni di
memoria destinate ad ospitare le variabili;
di fatto esse:
|
|
La scelta di forzare (con l'intervento dell'override CS:) il puntatore delle variabili da DS:<indirizzo> a CS:<indirizzo> è dunque sostanzialmente inutile, se l'obiettivo è quello di realizzare un eseguibile di tipo COM. |
|
Dunque sembrerebbe una scelta scriteriata... | |
In realtà, consapevoli che, in sua assenza, il compilatore genererebbe un codice che obbliga il processore ad usare il registro DS per puntare le variabili, pur costando un byte di codice macchina ogni volta che viene utilizzata, essa può rivelarsi importante almeno in 2 casi: se il codice COM prodotto è relativo ad un programma TSR (cioè lasciato parzialmente in memoria anche quando è terminato) oppure ad un oggetto di libreria (cioè è al corpo di una Procedura). |
|
In entrambi i casi quando il codice sarà in esecuzione non si ha la certezza che il contenuto del registro di segmento DS sia ancora uguale a CS, specialmente nel secondo caso. |
|
Se non ci fosse l'override CS: le locazioni delle variabili (come detto incluse tra le istruzioni) non verrebbero trovate (perchè cercate in un segmento diverso (DS) da quello in cui sono effettivamente presenti) provocando sicuri malfunzionamenti o, addirittura, il blocco del computer. |