CALL - volání procedury: Porovnání verzí

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
(Vytvorená stránka „;Instrukce : CALL - volání procedury ;Časování : 7-185 (80286), 3-275 (80386) ;Popis : Instrukce CALL způsobuje, že adresa příští vykonávané instrukce je ...“)
 
Řádek 6: Řádek 6:
  
 
;Popis
 
;Popis
: Instrukce CALL způsobuje, že adresa příští vykonávané instrukce je uchována v zásobníku a řízení  programu je predáno operandu instrukce CALL. Po ukončení volané procedury vykonáva volajíci  program   instrukce nasledujíci bezprostredne za instrukcí CALL.
+
: Instrukce [[CALL]] způsobuje, že adresa příští vykonávané instrukce je uchována v zásobníku a řízení  programu je predáno operandu instrukce [[CALL]]. Po ukončení volané procedury vykonáva volajíci  program instrukce nasledujíci bezprostredne za instrukcí [[CALL]].
  
  
Řádek 26: Řádek 26:
 
* volání "NEAR direct CALLS": je generována všeobecná výjimka  přivilegovaného  módu v případe, že  procedúra je lokalizována vňe segmentu CS.
 
* volání "NEAR direct CALLS": je generována všeobecná výjimka  přivilegovaného  módu v případe, že  procedúra je lokalizována vňe segmentu CS.
  
* volání  "NEAR indirect  CALLS": je generována všeobecná výjimka přivilegovaného módu při neplatné efektívni adrese  operandu  v  segmentových registrech CS, DS nebo ES  a nebo výjimka "chyba zásobníku" při  neplatné adrese  v  segmentu  SS.  Všeobecná  výjimka přivilegovaného  módu  je  generovaná také v případe, že je získán nepřímy  offset ležíci mimo hranice segmentu CS.
+
* volání  "NEAR indirect  CALLS": je generována všeobecná výjimka přivilegovaného módu při neplatné efektívni adrese  operandu  v  segmentových registrech [[CS]], [[DS]] nebo [[ES]] a nebo výjimka "chyba zásobníku" při  neplatné adrese  v  segmentu  [[SS]].  Všeobecná  výjimka přivilegovaného  módu  je  generovaná také v případe, že je získán nepřímy  offset ležíci mimo hranice segmentu [[CS]].
  
  
 
;Výjimky v reálnem módu
 
;Výjimky v reálnem módu
: Je generováno přerušení INT 13 v případe, že slovní operand má offset 0FFFFH.
+
: Je generováno přerušení [[INT 13]] v případe, že slovní operand má offset 0FFFFH.
  
  

Verze z 4. 11. 2012, 23:25

Instrukce
CALL - volání procedury
Časování
7-185 (80286), 3-275 (80386)
Popis
Instrukce CALL způsobuje, že adresa příští vykonávané instrukce je uchována v zásobníku a řízení programu je predáno operandu instrukce CALL. Po ukončení volané procedury vykonáva volajíci program instrukce nasledujíci bezprostredne za instrukcí CALL.


Syntaxe
CALL operand


Ovlivňuje příznaky
žádné (výjimkou je případné přepnutí úloh (task switching))


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
  • volání "NEAR direct CALLS": je generována všeobecná výjimka přivilegovaného módu v případe, že procedúra je lokalizována vňe segmentu CS.
  • volání "NEAR indirect CALLS": je generována všeobecná výjimka přivilegovaného módu při neplatné efektívni adrese operandu v segmentových registrech CS, DS nebo ES a nebo výjimka "chyba zásobníku" při neplatné adrese v segmentu SS. Všeobecná výjimka přivilegovaného módu je generovaná také v případe, že je získán nepřímy offset ležíci mimo hranice segmentu CS.


Výjimky v reálnem módu
Je generováno přerušení INT 13 v případe, že slovní operand má offset 0FFFFH.


Poznámka pro 80386
Slovní operand ma šírku 32 bitů, operand typu ukazatel má šírku 48 bitů.


Příklad
 CALL ADDER ; procedúra je uvnitr nebo vňe segmentu
 pro 80386:
 CALL IMMPTR  ;  Operand  typu ukazatel je 48-bitový
 CALL DISP16 ;  Užíva  32-bitový rozšírený ukazatel instrukce
 CALL registr nebo paměť
                   ; posunuti je 32-bitové.
                   ; slovní operandy jsou 32-bitové