IRET - návrat z přerušení

Z Delphi & Pascal (česká wiki)
Verze z 9. 11. 2012, 23:34, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
Instrukce
IRET - návrat z přerušení
Časování
17-169 (80286), 22-275 (80386)
Popis
V reálném adresním módu instrukce IRET vyzvedáva ze zásobníku IP (EIP), CS a FLAGS a ukončuje kód programu přerušení. V PM instrukce IRET závisí na nastavení příznaku NT (Nested Task flag):
  • NT = 1. Instrukce "obrací" efekt CALL nebo INT, které vyvolaly přepnutí úloh. Kód provádejíci instrukci IRET má svůj stav uchován ve svém registru stavu ulohy (TS). Znamená to, že při opetovné aktivaci úlohy bude provedena jako první instrukce nasledujíci instrukcí IRET.
  • NT = 0. Instrukce IRET vrací řízení z přerušovacího podprogramu, aniž se vyskytlo přepnutí úloh. Privilegovaná úroveň kódu, do nehož se řízení z přerušovacího podprogramu navrací, musí být stejná nebo menší než privilegovaná úroveň přerušovacího podprogramu.


Syntaxe
IRET (žádné operandy)


Ovlivňuje příznaky
Celý registr příznaku je vyzvednut ze zásobníku.


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Múže být generována všeobecná výjimka porušení ochrany paměti, výjimka "deskriptor nenalezen", výjimka "chyba zásobniku".


Výjimky v reálnem módu
Je generováno přerušení INT 13 při vyzvedávaní obsahu zásobníku majíciho offset 0FFFFH.


Poznámka pro 80386
Je použit 32-bitový rozšírený ukazatel instrukce. Úroveň INTER ukláda 48-bitový ESP. Jsou ukládaný 48-bitový EIP a 32-bitový FLAG.


Příklad
IRET