Tutorial Sezione Assembler

Dettaglio Istruzioni 

Le Schede del Tutorial

  Istruzioni della Cpu 80x86

SCHEDA n° 07 [I/ 017 di 198] 

    

    CALL - Chiama le procedure
     
bulletQuesta istruzione organizza la chiamata e l'esecuzione di una procedura, cioè un sottoprogramma terminato con RET.
bulletLa procedura chiamata 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.
bulletLe sue caratteristiche sono riassunte nella seguente tabella (leggi le istruzioni Legenda della Tabella):
         
CALL Destinazione  IP  <<  Destinazione
 

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

CALL

 LabelNear

19 7 7+m 3 1 3                  

CALL

 Far Ptr Label

28 13 17+m 18 2 5

CALL

 AX

16 7 7 5 1 2

CALL

 [Depo02]

21+EA 11 10+m 5 2 2,4
         
bulletLa tabella evidenzia che l'istruzione non altera alcuna flag (almeno se non si effettua un cambio di processo). Inoltre mostra le possibili tipologie dell'unico operando:
bulletetichetta, lasciando all'assemblatore il compito di sostituirla con i 16 o i 32 bit dell'effettivo indirizzo, vicino o lontano.
bulletun registro (a 16 o 32 bit), chiamata indiretta di procedura.
bulletil valore contenuto in una locazione di memoria (a 16 o a 32 bit), puntata nei possibili modi (ancora chiamata indiretta).
bulletLa procedura può essere già presente nell'apposita zona del programma, o assunta da una libreria (dichiarata, in questo caso, esterna, EXTRN).
         
bulletSe la chiamata di procedura è NEAR l'istruzione provvede ai seguenti compiti:
bulletcalcola l'indirizzo Offset dell'istruzione successiva a quella che sta eseguendo, sommando 0003 (numero di bytes del codice macchina corrispondente a CALL ProcNear) all'indirizzo corrente.
bulletdecrementa il valore corrente di SP e lo utilizza per puntare la locazione in cui scrivere la parte alta dell'indirizzo appena calcolato.
bulletdecrementa ancora il valore di SP e lo utilizza per puntare la locazione in cui scrivere la parte bassa dell'indirizzo appena calcolato.
bulletcarica IP con l'indirizzo di offset ProcNear, operando dell'istruzione, obbligando di fatto se stesso a saltare a quell'indirizzo.
bulletSe la chiamata di procedura è FAR l'istruzione provvede ai seguenti compiti:
bulletcalcola l'indirizzo Offset dell'istruzione successiva a quella che sta eseguendo, sommando 0005 (numero di bytes del codice macchina corrispondente a CALL ProcFar) all'indirizzo corrente.
bulletdecrementa il valore corrente di SP e lo utilizza per puntare la locazione in cui scrivere la parte alta del registro CS.
bulletdecrementa ancora il valore di SP e lo utilizza per puntare la locazione in cui scrivere la parte bassa di CS.
bulletdecrementa ancora SP e lo utilizza per puntare la locazione in cui scrivere la parte alta dell'indirizzo di offset calcolato poco fa.
bulletdecrementa ancora SP e lo utilizza per puntare la locazione in cui scrivere la parte bassa dell'indirizzo di cui sopra.
bulletcarica IP con l'indirizzo di offset ProcFar, primo operando dell'istruzione.
bulletcarica CS con l'indirizzo di segment ProcFar, secondo operando dell'istruzione, obbligando di fatto se stesso a saltare al nuovo indirizzo CS:IP.
     
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 CALL NEAR e alla gestione della CALL FAR.
     
bulletDopo l'esecuzione di CALL il processore si viene a trovare in tutt'altro ambiente, lontano dal programma principale da cui è partito, nel medesimo segmento se NEAR o addirittura in un altro se FAR; si mette ad eseguire diligentemente tutte le istruzioni della procedura, in attesa della RET, che gli consentirà di tornare nel suo percorso nativo, naturalmente a partire dall'indirizzo successivo a quello contenente l'istruzione CALL
         
bulletLa figura seguente mostra le risorse richieste da questa istruzione in funzione degli operandi e del tipo di indirizzamento coinvolti (leggi le istruzioni):
          

Addr

Codifica Masm

Sequenza Bytes

Istruzione

0100 55AA AA 55 Depo02 DW 55AAH
---- ---------------- ----------------- ------- ----------------------
0102
0105
0108
010A
010E
0113
E8 0108
E8 010E
FF D0
FF 16 0100
9A 0108 XXXX
2E FF 16 0100
E8 03 00 
E8 06 00
FF D0 
FF 16 00 01
9A 08 01 46 23 
2E FF 16 00 01


LabelNear:

LabelFar:
CALL LabelNear
CALL LabelFar
CALL AX
CALL [Depo02]
CALL Far Ptr LabelNear
CALL CS:[Depo02]

    

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 017 - CALL

    

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