| 
      Sezione | 
      
       
   
    
      Indirizzi Base
    
    
    
      Registri Interni
    
      | 
    
| Schede del Tutorial | 
| Stack - Definizione e Gestione | 
      SCHEDA n° 06 [ 5 di 7]  | 
   
  | 
| 
     | 
    
  | 
  
Le chiamate di sistema sono certamente extrasegmentali;
    si tratta di procedure speciali:
  
  | |||||||||
In ogni caso il processore può disporre di
    questi servizi eseguendo l'istruzione di
    chiamata 
   
  INT 
  xx; il numero
    esadecimale XX, passato come
    operando, indica il tipo di servizio desiderato; per restare agli esempi
    suggeriti poco fa:
  
  | 
| 
     
  | 
      
Quando il processore è chiamato ad eseguire l'istruzione 
   
  INT 
  xx provvede ai seguenti compiti: 
    
  | |||||||||||||||||
| Dopo l'esecuzione di INT xx, il processore si trova in tutt'altro ambiente, lontano dal programma principale da cui è partito, certamente in un altro segmento; si mette ad eseguire diligentemente tutte le istruzioni della procedura, in attesa della IRET, che gli consentirà di tornare nel suo percorso nativo, naturalmente subito dopo l'istruzione INT. | |||||||||||||||||
Quando il processore esegue l'istruzione  
   
  IRET
    (al termine della  Procedura di Sistema
    in cui è stato costretto a saltare) provvede ai seguenti compiti:
  
  | |||||||||||||||||
| Dopo l'esecuzione di IRET, il processore è dunque rientrato nei ranghi... | 
| 
     
  | 
      
| 
           | 
          In questo caso l'istruzione di ritorno, IRET, è del tutto diversa: recupera dallo Stack ben 6 bytes invece dei 2 di RET e i 4 di RETF. | 
| 
     
  | 
      
I movimenti del processore e dei suoi registri
    possono essere monitorati, sviluppati e analizzati in ambiente Debug,
    con l'aiuto di una semplice sequenza di istruzioni usata come banco di
    prova; a sinistra osserviamo i valori dei registri
    e a destra l'aspetto dello Stack, nelle
    varie fasi:
 
 
  | 
All'inizio (punto *1*),
    poichè la coppia di registri CS:IP
    contiene 0DE0:0100,
    il processore si trova costretto ad eseguire l'istruzione          MOV
    AX,0E2A
  
  | |||||
| Dopo l'esecuzione di MOV AX,0E2A (punto *2*), la coppia di registri CS:IP contiene 0DE0:0103: il processore si accinge ad eseguire INT 10: il puntatore di Stack non è stato influenzato dall'istruzione MOV: il suo valore è ancora SP=FFFE. | |||||
Dopo l'esecuzione di INT
    10
    (punto *3*):
  
  | 
| Dopo l'esecuzione di CMP CS:[08A7],02 e delle rimanenti istruzioni (<< omissis >>) della procedura di Sistema (punto *4*), la coppia di registri CS:IP contiene 0212:06AC e il processore si accinge ad eseguire IRET; il puntatore di Stack non è stato influenzato dalle istruzioni precedenti: il suo valore è ancora SP=FFF8. | |||||
Dopo l'esecuzione di IRET,
    dentro la procedura (punto *5*):
  
  | 
| 
     
  | 
      
Riassumiamo la dinamica
    dello Stack, nella gestione di una chiamata
    di procedura  di Sistema (INT);
    quando il processore è finalmente rientrato nel programma principale (per
    l'azione della  
   
  IRET della procedura,
    dopo esserne uscito per l'azione di INT 10H):
  
  | 
| 
     
  | 
      
| SP:FFF6 ??
        non ancora utilizzato SP:FFF7 ?? non ancora utilizzato SP:FFF8 05 Lo Offset SP:FFF9 01 Hi Offset SP:FFFA E0 Lo Segment SP:FFFB 0D Hi Segment SP:FFFC 02 Lo Registro Flag SP:FFFD 32 Hi Registro Flag SP:FFFE 00 <- SP=FFFE SP:FFFF 00  | 
      
  | 
| 
      
       |     
    Scheda n° 06 | 
      
       | 
    Stack - Definizione e Gestione | 
     | 
    
    
     | 
    
     | 
 ||
| Scheda n° 06 - 5 | 
      
  | 
    
| 
     
  | 
  
        
  | 
    
        
  | 
    
| 
      
         
        Home 
     | 
      
  | 
    |||||||
      
  | 
       
          
        Motore Ricerca  | 
      
  |