3-36
INSTRUCTION SET REFERENCE
ARPLAdjust RPL Field of Segment Selector
Description
This instruction compares the RPL fields of two segment selectors. The first operand (the desti-
nation operand) contains one segment selector and the second operand (source operand)
contains the other. (The RPL field is located in bits 0 and 1 of each operand.) If the RPL field of
the destination operand is less than the RPL field of the source operand, the ZF flag is set and
the RPL field of the destination operand is increased to match that of the source operand. Other-
wise, the ZF flag is cleared and no change is made to the destination operand. (The destination
operand can be a word register or a memory location; the source operand must be a word
register.)
The ARPL instruction is provided for use by operating-system procedures (however, it can also
be used by applications). It is generally used to adjust the RPL of a segment selector that has
been passed to the operating system by an application program to match the privilege level of
the application program. Here the segment selector passed to the operating system is placed in
the destination operand and segment selector for the application programs code segment is
placed in the source operand. (The RPL field in the source operand represents the privilege level
of the application program.) Execution of the ARPL instruction then insures that the RPL of the
segment selector received by the operating system is no lower (does not have a higher privilege)
than the privilege level of the application program. (The segment selector for the application
programs code segment can be read from the stack following a procedure call.)
Refer to Section 4.10.4., Checking Caller Access Privileges (ARPL Instruction) in Chapter 4,
Protection of the Intel Architecture Software Developers Manual, Volume 3, for more informa-
tion about the use of this instruction.
Operation
IF DEST(RPL) < SRC(RPL)
THEN
ZF
<
1;
DEST(RPL)
<
SRC(RPL);
ELSE
ZF
<
0;
FI;
Flags Affected
The ZF flag is set to 1 if the RPL field of the destination operand is less than that of the source
operand; otherwise, is cleared to 0.
Opcode
Instruction
Description
63 /r
ARPL r/m16,r16
Adjust RPL of r/m16 to not less than RPL of r16