16.02.2013 Aufrufe

24531904_j

24531904_j

24531904_j

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

IRET/IRETD—Interrupt Return ( 続き )<br />

tempCS ← Pop();<br />

tempEFLAGS ← Pop();<br />

tempEIP ← tempEIP AND FFFFH;<br />

tempEFLAGS ← tempEFLAGS AND FFFFH;<br />

FI;<br />

IF tempEFLAGS(VM) = 1 AND CPL=0<br />

THEN<br />

GOTO RETURN-TO-VIRTUAL-8086-MODE;<br />

(* PE=1, VM=1 in EFLAGS image *)<br />

ELSE<br />

GOTO PROTECTED-MODE-RETURN;<br />

(* PE=1, VM=0 in EFLAGS image *)<br />

FI;<br />

RETURN-FROM-VIRTUAL-8086-MODE:<br />

(* Processor is in virtual-8086 mode when IRET is executed and stays in virtual-8086 mode *)<br />

IF CR4.VME = 0<br />

THEN<br />

IF IOPL=3 (* Virtual mode: PE=1, VM=1, IOPL=3 *)<br />

THEN<br />

IF OperandSize = 32<br />

THEN<br />

IF top 12 bytes of stack not within stack limits THEN #SS(0); FI;<br />

IF instruction pointer not within code segment limits THEN #GP(0); FI;<br />

EIP ← Pop();<br />

CS ← Pop(); (* 32-bit pop, high-order 16-bits discarded *)<br />

EFLAGS ← Pop();<br />

(*VM,IOPL,VIP,and VIF EFLAGS bits are not modified by pop *)<br />

ELSE (* OperandSize = 16 *)<br />

IF top 6 bytes of stack are not within stack limits THEN #SS(0); FI;<br />

IF instruction pointer not within code segment limits THEN #GP(0); FI;<br />

EIP ← Pop();<br />

EIP ← EIP AND 0000FFFFH;<br />

CS ← Pop(); (* 16-bit pop *)<br />

EFLAGS[15:0] ← Pop(); (* IOPL in EFLAGS is not modified by pop *)<br />

FI;<br />

ELSE #GP(0); (* trap to virtual-8086 monitor: PE=1, VM=1, IOPL

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!