Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Stack - Definizione e Gestione |
SCHEDA n° 06 [ 2 di 7] |
|
|
Lo Stack è dunque una sequenza dinamica di words scritte nella memoria Ram; poichè la struttura è tipica dei programmi in esecuzione (compreso il sistema operativo MsDos) è logico pensare che l'area di memoria in cui si sviluppa sia una parte di quella affidata al file stesso. | |
Con il termine dinamica si intende che il numero di word dentro la memoria dipende dall'istruzione che il processore si accinge ad eseguire, in funzione della quale può crescere, rimanere inalterato o diminuire. | |
Quando il loader predispone la memoria Ram per un programma tipo EXE può destinargli fino a 4 segmenti (cioè aree da 64k ciascuna): una di esse è sempre destinata ad ospitare lo Stack e, per la sua gestione, provvede a inizializzare un puntatore dedicato, ottenuto con i registri SS:SP. | |
I programmi eseguibili intrasegmentali, cioè di tipo COM sono allocati sempre in un unico segmento; poiché nemmeno loro possono fare a meno dello Stack, l'area ad esso dedicata è la parte finale del segmento, opposta (e, di norma, sufficientemente lontana) da quella occupata dal codice e dai dati. |
|
Qualunque sia il tipo di programma eseguibile
le caratteristiche dello Stack non
cambiano; vediamo in dettaglio:
|
|
Nella norma lo Stack è una struttura destinata al microprocessore, in modo di consentirgli di operare in sintonia con le esigenze del programmatore; per la precisione ci sono situazioni nelle quali non è possibile fare a meno dello Stack: le chiamate di Procedure. | |
Per questa operazione il processore si avvale di una coppia di registri dedicata, SS:SP. |
|
Non
dimenticare: il puntatore di Stack, SS:SP, punta sempre
la locazione successiva a quella che sta per essere
caricata. Oppure: SS:SP punta il byte meno significativo dell'ultima word inserita nello Stack |
|
La Procedura è un particolare sottoprogramma (un gruppo più o meno numeroso di istruzioni) specializzato a compiere un determinato servizio; questo codice eseguibile è facilmente riconoscibile perchè la sua ultima istruzione è sempre RET (o IRET); come vedremo questa esclusiva caratteristica è legata a doppio filo a quelle dello Stack! |
|
La chiamata di Procedure è gestita dal
processore con 2 istruzioni,
CALL e
INT:
|
|
Nella prossima pagina riprenderemo questo argomento da un punto di vista più tecnico, sottolineando in che misura esso è correlato con lo Stack. | |
In questa sede ricordiamo che, con l'istruzione CALL, si possono chiamare sia le Procedure definite nel nostro programma sorgente sia quelle assunte (EXTRN) da una libreria; in ogni caso esse possono essere di 2 tipi: se sono presenti dentro il segmento nel quale vengono chiamante si dicono NEAR; in caso contrario sono dette FAR. | |
Le procedure chiamate con INT sono invece dette di sistema: il processore le tratterà come un particolare tipo di procedura FAR, più impegnativo rispetto a quelle normali. |
|
Va sottolineato, peraltro, che questa struttura può tornar utile anche al programmatore (cioè a noi...); con l'aiuto delle istruzioni PUSH e POP è possibile (rispettivamente) inserire e togliere 2 bytes dallo Stack, di solito contenuto nel registro coinvolto come operando. | |
Questa esigenza non è tanto improbabile o strana se si pensa che il numero di registri è piuttosto limitato e, di norma, il loro contenuto è prezioso e non deve essere sovrascritto; quando si presenta la necessità o il rischio di sporcare un registro conviene salvarlo nello Stack (con un PUSH) per poi recuperarlo nello stesso o in un altro registro a 16 bit (con POP). Anche di questo riparleremo in una prossima pagina. | |
In casi eccezionali, di solito legati agli ambienti di programmazione ad alto livello, lo Stack può essere usato massicciamente per passare i parametri alle procedure: si tratta di una tecnica che si sovrappone alla normale gestione e che non deve in alcun modo recare danno ne al suo contenuto ne ai suoi puntatori. Per questo solitamente viene gestita con un puntatore di Stack alternativo, SS:BP. |
|
Non
dimenticare: lo Stack si deve sempre utilizzare con
coppie di azioni complementari: quello che si scrive deve essere,
prima o poi, tolto:
|
|
|
Scheda n° 06 | Stack - Definizione e Gestione | |||||||
Scheda n° 06 - 2 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|