Андрей Газибаров


без тайни

Инструкциите On-line

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) Целевото отместване е извън кодовия сегмент
 
Съдържание Пълен текст
 
  PDF, 3.6M Приложение, 18К