ia-32_instruction-set-ref_a-m

Processor operation flushrelevanttlbentries continue

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: ata and limits. See "Changes to Instruction Behavior in VMX Non-Root Operation" in Chapter 21 of the Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3B, for more information about the behavior of this instruction in VMX non-root operation. Operation IF PE = 0 THEN GOTO REAL-ADDRESS-MODE; ELSE IF (IA32_EFER.LMA = 0) THEN (* Protected mode *) GOTO PROTECTED-MODE; ELSE (* IA-32e mode *) GOTO IA-32e-MODE; FI; FI; REAL-ADDRESS-MODE; IF OperandSize = 32 THEN IF top 12 bytes of stack not within stack limits THEN #SS; FI; tempEIP 4 bytes at end of stack IF tempEIP[31:16] is not zero THEN #GP(0); FI; EIP Pop(); CS Pop(); (* 32-bit pop, high-order 16 bits discarded *) tempEFLAGS Pop(); Vol. 2 3-485 INSTRUCTION SET REFERENCE, A-M EFLAGS (tempEFLAGS AND 257FD5H) OR (EFLAGS AND 1A0000H); ELSE (* OperandSize = 16 *) IF top 6 bytes of stack are not within stack limits THEN #SS; FI; EIP Pop(); (* 16-bit pop; clear upper 16 bits *) CS Pop(); (* 16-bit pop *) EFLAGS[15:0] Pop(); FI; END; PROTECTED-MODE: IF VM = 1 (* Virtual-8086 mode: PE = 1, VM = 1 *) THEN GOTO RETURN-FROM-VIRTUAL-8086-MODE; (* PE = 1, VM = 1 *) FI; IF NT = 1 THEN GOTO TASK-RETURN; (* PE = 1, VM = 0, NT = 1 *) FI; IF OperandSize = 32 THEN IF top 12 bytes of stack not within stack limits THEN #SS(0); FI; tempEIP Pop(); tempCS Pop(); tempEFLAGS Pop(); ELSE (* OperandSize = 16 *) IF top 6 bytes of stack are not within stack limits THEN #SS(0); FI; tempEIP Pop(); tempCS Pop(); tempEFLAGS Pop(); tempEIP tempEIP AND FFFFH; tempEFLAGS tempEFLAGS AND FFFFH; FI; IF tempEFLAGS(VM) = 1 and CPL = 0 THEN GOTO RETURN-TO-VIRTUAL-8086-MODE; (* PE = 1, VM = 1 in EFLAGS image *) ELSE GOTO PROTECTED-MODE-RETURN; (* PE = 1, VM = 0 in EFLAGS image *) FI; IA-32e-MODE: 3-486 Vol. 2 INSTRUCTION SET REFERENCE, A-M IF NT = 1 THEN #GP(0); ELSE IF OperandSize = 32 THEN IF top 12 bytes of stack not within stack limits THEN #SS(0); FI; tempEIP Pop(); tempCS Pop(); tempEFLAGS Pop(); ELSE IF OperandSize = 16 THEN IF top 6 bytes of stack are not within stack limits THEN #SS(0); FI; tempEIP Pop(); tempCS Pop(); tempEFLAGS Pop(); tempEIP tempEIP AND FFFFH; tempEFLAGS tempEFLAGS AND FFFFH; FI; ELSE (* OperandSize = 64 *) THEN tempRIP Pop(); tempCS Pop(); tempEFLAGS Pop(); tempRSP Pop(); tempSS Pop(); FI; GOTO IA-32e-MODE-RETURN; RETURN-FROM-VIRTUAL-8086-MODE: (* Processor is in virtual-8086 mode when IRET is executed and stays in virtual-8086 mode *) IF IOPL = 3 (* Virtual mode: PE = 1, VM = 1, IOPL = 3 *) THEN IF OperandSize = 32 THEN IF top 12 bytes of stack not within stack limits THEN #SS(0); FI; IF instruction pointer not within code segment limits THEN #GP(0); FI; EIP Pop(); CS Pop(); (* 32-bit pop, high-order 16 bits discarded *) EFLAGS Pop(); (* VM, IOPL,VIP and VIF EFLAG bits not modified by pop *) ELSE (* OperandSize = 16 *) IF top 6 bytes of stack are not within stack limits Vol. 2 3-487 INSTRUCTION SET REFERENCE, A-M THEN #SS(0); FI; IF instruction pointer not within code segment limits THEN #GP(0)...
View Full Document

  • Winter '11
  • Watlins
  • X86, Intel corporation, Packed Single-Precision Floating-Point, Packed Double-Precision Floating-Point, single-precision floating-point values

{[ snackBarMessage ]}

Ask a homework question - tutors are online