CALL - volání procedury: Porovnání verzí
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 [[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, 22: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
- volani "FAR CALLS": je generována všeobecná výjimka přivilegovaného módu, výjimka "deskriptor neexistuje", výjimka "chyba zasobniku" a výjimka "neplatný segment stavu úlohy".
- 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é