Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
PSP - Prefisso del Segmento di Programma |
SCHEDA n° 05 [ 1 di 5] |
|
|
Il PSP è un'area di memoria di 256 bytes collocata all'inizio (Prefisso) del Segmento destinato (dal loader del dos) ad un Programma eseguibile, nel momento del suo caricamento in memoria; questa definizione giustifica dunque il suo nome. | |
Quando il Caricatore DOS è chiamato ad allocare in memoria un programma eseguibile riserva per esso la prima zona di memoria Ram libera, almeno un intero segmento (65526 locazioni consecutive), facendole puntare tutti i registri di segmento, CS, DS, ES e SS. | |
Nelle prime locazioni di questo segmento, a partire cioè dall'indirizzo di offset 0000H, predispone comunque il PSP, una vera miniera di informazioni destinate alla gestione del programma stesso, ma estremamente utili anche a noi. |
|
In particolare le prime 92 locazioni, al di sotto dell'offset 005CH, contengono dati gestionali molto importanti, come l'indirizzo a cui verrà ceduto il controllo quando il programma ha termine, gli indirizzi delle procedure di servizio degli errori critici e della combinazione di tasti Ctrl-C, il puntatore alle stringhe AsciiZ dell'Environment (ambiente) che DOS utilizza per passare informazioni al programma. | |
Per questa ragione è fortemente sconsigliato alterare il contenuto del PSP, almeno al fino a questo indirizzo. |
|
Il contenuto delle rimanenti 164 locazioni non è indispensabile: sono sostanzialmente dei buffer di servizio utilizzabili dal nostro programma, ufficialmente per il trasferimento di dati verso o da la memoria di massa, per altro con tecniche ormai obsolete. | |
Ciò significa che in determinate condizioni questa parte del prefisso può essere recuperata al programma, specialmente quando esso deve rimanere residente (TSR). |
|
Solitamente il programma (codice e dati) viene caricato subito dopo il PSP, a partire, quindi, dalla locazione 0100H, almeno per gli eseguibili intrasegmentali, cioè di tipo COM: in questo caso il contenuto dei registri di segmento non viene modificato, cioè puntano ancora tutti l'inizio del PSP; i 4 segmenti sono dunque fisicamente sovrapposti. | |
In un programma tipo EXE può capitare invece che la sua intestazione (header) suggerisca al loader di cambiare l'indirizzo di partenza del codice (comunque puntato da CS:IP) lasciando in IP ad un valore diverso da 0100H; in questo caso può succedere che CS e SS assumano valori diversi da quelli inizialmente predisposti, uguali a DS e ES. |
|
In ogni caso DS e ES continuano dunque a puntare all'inizio del PSP. |
|
Nelle prossime pagine la
scheda affronta i dettagli del Prefisso
del Segmento di Programma; ecco l'elenco degli argomenti:
|
|
Scheda n° 05 | Prefisso di Segmento di Programma | |||||||
Scheda n° 05 - 1 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|