| RET |
| Връщане от подпрограма |
| Общи форми: |
RET RET const |
| |
| Форма |
КОП |
CPUID |
I8086 |
I80386 |
I80486 |
| 16 |
32 |
64 |
Alt |
|
I8086 |
I80386 |
I80486 |
| RETN |
C3 |
C3 |
C3 |
EA |
|
20 |
10+m |
5 |
| RETN iw |
C2 iw |
C2 iw |
C2 iw |
DE iw |
|
24 |
10+m |
5 |
| RETF |
CB |
CB |
CB |
EB |
|
32 |
18+m pm=32+m pm=68 |
13 pm=18 pm=33 |
| RETF iw |
CA iw |
CA iw |
CA iw |
DF iw |
|
31 |
18+m pm=32+m pm=68 |
13 pm=18 pm=33 |
|
| Действие |
IF Instruction IS RETN
eIP ← pop()
ELSE /* far return */
eIP ← pop()
CS ← pop()
CacheDescriptor(CS)
IF (PE = 1) AND (VM = 0)
IF (64-Bit Mode) OR (new PL > CPL)
IF constant THEN
eSP ← eSP + constant
ENDIF
SS:eSP ← pop()
CacheDescriptor(SS)
FOR xS in (ES, DS, FS, GS) DO
IF xS.DPL < new PL THEN
xS ← 0
ENDIF
NEXT
ENDIF
ENDIF
ENDIF
IF constant THEN
eSP ← eSP + constant
ENDIF
|
| Флагове |
| PE |
VM |
NT |
IOPL |
OF |
DF |
IF |
TF |
SF |
ZF |
AF |
PF |
CF |
| T |
T |
|
|
|
|
|
|
|
|
|
|
|
|
| CPU |
| 8086 |
186 |
V20 |
286 |
386 |
486 |
P |
P-P |
P-II |
MMX |
SSE |
3D! |
E64 |
| • |
• |
• |
• |
• |
• |
• |
• |
• |
• |
|
|
• |
|
| Изключения |
ОБЩИ +
| Защитен режим: |
| #SS(0) |
Стекът не съдържа всички необходими данни (CS:eIP, параметри, SS:eSP) |
| #GP(Selector) |
Селекторът е извън таблицата |
| #GP(Selector) |
Сегментът е несъвместим и DPL < CPL |
| #NP(Selector) |
Сегментът не присъства в паметта |
| #GP(Selector) |
Избраният дескриптор не е код |
| #SS(Selector) |
Възстановеният стек е невалиден |
| #GP(0) |
Целевото отместване е извън кодовия сегмент |
|