Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Schede del Tutorial

Home » Programma il Computer » Tutorial Assembly

Le Schede del Tutorial

  PSP - Prefisso del Segmento di Programma

SCHEDA n° 05 [ 2  di 5] 

    

    PSP - La parte da non toccare ! [ prima parte ]
     
bulletLe prime 92 locazioni del PSP (da 0000H a 005BH) sono a disposizione nostra e del programma per cui sono state create; sono state scritte dal DOS nel momento in cui l'eseguibile è stato allocato in memoria e non devono in alcun modo essere modificate. Vediamo la prima parte di esse:

      

Offset N° bytes°

Descrizione

0000 2
  Contiene i 2 bytes CDH, 20H, corrispondenti al codice operativo dell'istruzione INT 20H che, nella normale programmazione in ambiente 80x86, consente ai programmi eseguibili di restituire il controllo al DOS.
  La presenza di questi 2 bytes è un retaggio del vetusto CP/M, un glorioso sistema operativo in voga quando i personal computer dovevano ancora nascere; in quel tempo per porre fine all'esecuzione di un programma e restituire il controllo al sistema operativo era sufficiente eseguire l'istruzione RET
  Se si forza l'esecuzione di una RET dall'interno dei nostri eseguibili scritti per 80x86 il processore preleva coerentemente dallo stack l'indirizzo a cui tornare, dando per scontato che qualcuno abbia provveduto a memorizzarlo in esso prima di eseguire la RET; è facile prevedere cosa succede se nessuno ha predisposto questo indirizzo: il processore cede il controllo chissà a chi! e il computer probabilmente si blocca.
  Invece no! Proprio per venire incontro agli sprovveduti neofiti il progettista DOS ha mantenuto la possibilità di tornare al prompt anche eseguendo RET, montando un meccanismo tanto semplice quanto diabolico:
  - il loader, subito dopo aver creato il PSP (proprio ciò di cui ci occupiamo in queste pagine), scrive i valori 00H nelle ultime locazioni del segmento riservato al programma, cioè quelle puntate da FFFEH, e obbliga il registro SP a puntarle.
  - è chiaro, dunque, che l'eventuale esecuzione di una RET (illogica nella norma) obbliga il processore a prelevare il contenuto corrente dello stack, appunto l'indirizzo 0000H, e a saltarci; poiché l'indirizzo 0000H è proprio l'inizio del PSP , se in quelle locazioni sono presenti i bytes CDH, 20H, il processore eseguirà una INT 20H restituendo il controllo al DOS.
  MAGIA: con un RET ho comunque eseguiti l'istruzione INT 20H e sono comunque tornato al DOS.
0002 2
  Contiene l'indirizzo in paragrafi del primo paragrafo libero nella ram del computer (per esempio 9FFFH), cioè l'indirizzo di segmento della memoria aldilà dei blocchi allocati per il programma; l'esempio suggerito (per altro letto dal prefisso di un eseguibile, dopo la sua allocazione) indica che il Dos ha destinato al programma tutta la ram disponibile.
  L'indirizzo fisico della prima locazione libera si ottiene moltiplicando questo numero per 16; nel nostro esempio vale 9FFF0H, proprio a ridosso della Ram Video Grafica, il che ribadisce che tutta la memoria è stata assegnata al programma.
  Non dimenticare che, comunque, taluni programmi usano anche locazioni alte di memoria, il ché‚ rende inattendibile questo valore; se desideri avere maggiori certezze  conviene riferirsi alle funzioni DOS 48H (Allocate Memory), 49H (Free Allocated Memory) e 4AH (Modify Memory Allocation).
0004 1
 

Byte riservato al DOS, di norma a 00H.

0005 1
  Contiene il codice operativo dell'istruzione CALL FAR (cioè 9AH) il ché fa presumere che i successivi 4 bytes siano pronti ad ospitare i 4 bytes di un indirizzo logico completo, segment:offset, naturalmente scritti con la logica Lo-Hi, cioè in sequenza parte passa e parte alta dell'offset, parte bassa e parte alta del segment, per esempio 9A F0FE 1DF0 per CALL F01D:FEF0).
  Si tratta di un'altra paranoia intesa a facilitare la chiamata di una procedura lontana con una struttura preconfezionata; la letteratura parla di struttura per implementare la chiamata di una funzione DOS (INT 21H) intendendo che l'operando sia quello della procedura di servizio delle funzioni DOS. 
0006 2
  Se riferita alla definizione data all'offset 0005 si tratta dell'indirizzo di offset dell'operando dell'istruzione CALL FAR
   Il valore di default indica però anche la quantità di memoria (in bytes) ancora utilizzabile nel segmento dal programma fino a FFF0H (sedici bytes prima del termine del segmento), per esempio FEF0H.
0008 2
  Se riferita alla definizione data all'offset 0005 si tratta dell'indirizzo di segment dell'operando dell'istruzione CALL FAR
  Altrimenti i 2 bytes sono da ritenersi riservati.

    

Pagina Precedente Scheda n° 05 Pagina Successiva Prefisso di Segmento di Programma Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 05 -  2
1 2 3 4 5

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati