CALL - volání procedury

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
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é