beautypg.com

Intel 253666-024US User Manual

Page 577

background image

Vol. 2A 3-531

INSTRUCTION SET REFERENCE, A-M

LDS/LES/LFS/LGS/LSS—Load Far Pointer

FI;
SegmentRegister ← SegmentSelector(SRC) ;

SegmentRegister ← SegmentDescriptor([SRC]);

FI;

ELSE IF FS, or GS is loaded with a NULL selector:

THEN

SegmentRegister ← NULLSelector;

SegmentRegister(DescriptorValidBit) ← 0; FI; (* Hidden flag;

not accessible by software *)

FI;
DEST ← Offset(SRC);

PREOTECTED MODE OR COMPATIBILITY MODE;

IF SS is loaded

THEN

IF SegementSelector

=

NULL

THEN #GP(0);

ELSE IF Segment selector index is not within descriptor table limits

or segment selector RPL

CPL

or access rights indicate nonwritable data segment
or DPL

CPL

THEN #GP(selector); FI;

ELSE IF Segment marked not present

THEN #SS(selector); FI;

FI;
SS ← SegmentSelector(SRC);

SS ← SegmentDescriptor([SRC]);

ELSE IF DS, ES, FS, or GS is loaded with non-NULL segment selector

THEN IF Segment selector index is not within descriptor table limits

or access rights indicate segment neither data nor readable code segment
or segment is data or nonconforming-code segment
and (RPL > DPL or CPL > DPL)

THEN #GP(selector); FI;

ELSE IF Segment marked not present

THEN #NP(selector); FI;

FI;
SegmentRegister ← SegmentSelector(SRC) AND RPL;

SegmentRegister ← SegmentDescriptor([SRC]);

FI;

ELSE IF DS, ES, FS, or GS is loaded with a NULL selector:

THEN

SegmentRegister ← NULLSelector;

SegmentRegister(DescriptorValidBit) ← 0; FI; (* Hidden flag;

not accessible by software *)