Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 158 di 198] 

    

    RET - Pone fine ad una procedura
     
bulletL'istruzione RET organizza il ritorno al programma chiamante al termine di una procedura, cioè un sottoprogramma chiamato con CALL.
bulletLa procedura da cui si torna può essere di tipo NEAR, cioè posta dentro il segmento di codice in cui è chiamata, o FAR, in caso contrario; questa caratteristica impone all'istruzione un diverso modo di gestire le operazioni.
bulletNella normale programmazione non è necessario specificare esplicitamente il tipo di RET desiderato: l'assemblatore, infatti, è in grado di generare automaticamente il codice corretto in funzione del contesto near (RETN) o far (RETF) in cui è trovata l'istruzione RET.
bulletA questa istruzione si può, se necessario, passare un operando numerico che esprime il numero di byte di stack che devono essere scaricati dopo il recupero dell'indirizzo ritorno; questa opportunità è frequentemente utilizzata dai linguaggi di programmazione ad alto livello per liberare l'area stack dai parametri passati in ingresso alla procedura da cui si torna.   
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
       RET [numero pari]  equivale a   POP IP                    (se near, RETN)
 equivale a   POP IP + POP CS    (se  far,  RETF) 
 

Esempio di Applicazione

Cicli di Clock Mem
Acces

Bytes
Flag   influenzate
Mnemonico Operandi 86 268 386 486 O D I T S Z A P C

RET (RETN)

 

16 11+m 10+m 5 1 1  

 

            

 

   

RET (RETF)

 

26 15+m 18+m 13 1 1

RET (RETN)

 02H

20 11+m 11+m 5 2 3

RET (RETF)

 10H

25 15+m 18+m 14 2 3
         
bulletLa tabella evidenzia che l'istruzione non altera alcuna flag. 
         
bulletSe la procedura da cui si torna è NEAR l'istruzione RET (o specificatamente RETN) provvede ai seguenti compiti:
bulletpreleva il byte contenuto nella locazione attualmente puntata da SP, lo trasferisce nella parte bassa di IP.
bulletincrementa il valore di SP e lo utilizza per puntare la locazione da cui prelevare il byte da utilizzare come parte alta di IP.
bulletincrementa ancora SP.
bulletsalta alla locazione di programma indicata dal nuovo valore di IP, praticamente l'indirizzo di offset della locazione del programma principale successiva a quella con la CALL che l'aveva costretto ad uscirne.
bulletSe la procedura da cui si torna è FAR l'istruzione RET (o specificatamente RETF) provvede ai seguenti compiti:
bulletpreleva il byte contenuto nella locazione attualmente puntata da SP, lo trasferisce nella parte bassa di IP.
bulletincrementa il valore di SP e lo utilizza per puntare la locazione da cui prelevare il byte da utilizzare come parte alta di IP.
bulletincrementa ancora SP.e lo utilizza per puntate la locazione da cui prelevare la parte bassa di CS.
bulletincrementa ancora SP e lo utilizza per puntare la locazione da cui prelevare la parte alta di CS.
bulletincrementa ancora il valore di SP.
bulletsalta alla locazione di programma indicata dal nuovo valore di CS:IP, praticamente l'indirizzo logico completo della locazione del programma principale successiva a quella con la CALL che l'aveva costretto ad uscirne.
bulletSe insieme all'istruzione RET viene fornito un operando numerico, dopo le consuete operazioni illustrate qui sopra, il numero viene semplicemente sommato a SP; questo significa effettivamente "scaricare" i bytes dallo stack, anche se ovviamente di essi rimarrà traccia in memoria, almeno fino al prossimo riutilizzo di questa preziosa area.
     
bulletLe 2 sequenze precedenti sono tratte dalle preziose schede dedicate allo Stack: se vuoi scoprire in dettaglio cosa fa il processore in questi casi consulta quelle dedicate alla gestione di RETNEAR e alla gestione della RETFAR.
bulletDopo l'esecuzione di RET, il processore è dunque rientrato nei ranghi..., nel programma principale da cui è partito, nel medesimo segmento se NEAR o in un altro se FAR.
bulletLa figura seguente mostra l'unico codice operativo di queste istruzioni con i bytes dell'eventuale operando coinvolto (leggi le istruzioni):
          

Addr

Codifica Masm 

Sequenza Bytes 

Istruzione 

0100
0101
0102

0103
0106
0109
C3
C3
CB

C2 0002
C2 0002
CA 0010
C3
C3
CB

C2 02 00
C2 02 00
CA 10 00
     RET
RETN
RETF

RET  02H
RETN 02H
RETF 10H

    

Pagina Precedente Scheda n° 07 Pagina Successiva Istruzioni Cpu 80x86 Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Istruzione 158 - RET

    

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