Otevřít hlavní menu

Změny

RET - návrat z procedúry

Přidáno 2 520 bajtů, 11. 1. 2013, 17:54
Vytvorená stránka „;Instrukce : RET - návrat z procedúry ;Časování : 15-55 (80286), 10-68 (80386) ;Popis : Instrukce zabezpečuje pokračování programu tím, že prěnese řízen...“
;Instrukce
: RET - návrat z procedúry

;Časování
: 15-55 (80286), 10-68 (80386)

;Popis
: Instrukce zabezpečuje pokračování programu tím, že prěnese řízení progamu na adresu návratu, která byla (při volání procedúry) uložená do zásobníku. Tato adresa je obvykle umístěna do zásobníku instrukci [[CALL]]. Intrasegmentové ([[NEAR]]) návraty [[RET]] plní registr instrukce (instruction pointer) dvěma nejhornejšími byty umístěnými na vrcholu zásobníku. Tyto dva byty udávají offset instrukce která má být vykonávaná jako další. Intersegmentové ([[FAR]]) návraty [[RET]] začínají stějne jako intrasegmentové přenesením horních dvou byte ze zásobníku (t.j. offset příští vykonávané instrukce). Jako další akce je však provedeno naplnění registru [[CS]] dalšími dvěma byte ze zásobníku. Tyto další dva byte obsahují adresu segmentu v němž leží příští vykonávaná instrukce. Abychom provedli intrasegmentový návrat [[RET]] a změnili ukazatele zásobníku je tedy trěba zavést horní dva byte ze zásobníku do registru instrukce. Pak je trěba zaéest další dva byte ze zásobníku do ukazatele zásobníku ([[stack pointer]]). Tyto poslední dva byte znovu nastaví poslední obsah ukazatele zásobníku jenž mohl případne být uložen na vrchol zásobníku před instrukci CALL. Abychom provedli intersegmentový návrat [[RET]] a zmenili ukazatele zásobníku je trěba opět zavést horní dva byte ze zásobníku do registru. To je offset příští vykonávané instrukce. Další dva byte jsou ze zásobníku zavedeny do registru [[CS]]. To je adresa segmentu v němž leží příští vykonávaná instrukce. Další dva byte ze zásobníku se musí uložit do ukazatele zásobníku ze stejných pohnútek jako při intrasegmentovém návratu.


;Syntaxe
: RET (žádné operandy)


;Ovlivňuje příznaky
: žádné


;Nedefinované příznaky
: žádné


;Výjimky v privilegovaném módu
: V některých případech je generována všeobecná výjimka porušení ochrany paměti, výjimka "[[deskriptor není přítomen]]" nebo výjimka "[[chyba zásobníku]]".


;Výjimky v reálnem módu
: Jestliže je slovní operand na offsetu 0FFFFH je generováno přerušení [[INT 13]].


;Poznámka pro 80386
: Je používan 32-bitový rozšířený ukazatel instrukce. Ze zásobníku je vyzvedaván 32-bitový [[EIP]].


;Příklad
RET

[[Category:Assembler]]
[[Category:Instrukce mikroprocesoru 80386]]