操作碼 |
指令 |
說明 |
63 /r |
ARPL r/m16,r16 |
將 r/m16 的 RPL 調整到不小於 r16 的 RPL |
比較兩個段選擇器 RPL 欄位。第一個運算元(目標運算元)包含一個段選擇器,第二個運算元(源運算元)包含另一個。(RPL 欄位位於每個運算元的位 0 與 1)。如果目標運算元的 RPL 欄位小於源運算元的 RPL 欄位,則設定 ZF 標誌,且目標運算元的 RPL 欄位遞增,以便同源運算元的匹配。否則將清除 ZF 標誌,且目標運算元保持不變。(目標運算元可以是字暫存器或記憶體位置;源運算元必須是字暫存器)。
提供的 ARPL 指令用於操作系統過程(不過應用程式也可以使用它)。它通常用於調整應用程式已經傳遞到操作系統的段選擇器的 RPL,以便同應用程式的特權級別匹配。這裡,傳遞到操作系統的段選擇器中放入目標運算元,應用程式程式碼段的段選擇器中放入源運算元。(源運算元的 RPL 欄位表示應用程式的特權級別)。這樣,執行 ARPL 指令可以確保操作系統收到的段選擇器的 RPL 不低於(不具有更高的特權)應用程式的特權級別。(應用程式程式碼段的段選擇器可以從過程呼叫之後的堆疊中讀取)。
如需有關此指令用法的詳細資訊,請參閱“IA-32 英特爾® 體系結構軟件開發人員手冊”第 3 卷第 4 章中的“檢查呼叫者訪問特權”。
IF DEST[RPL) < SRC[RPL)
THEN
ZF 1;
DEST[RPL) SRC[RPL);
ELSE
ZF 0;
FI;
如果目標運算元的 RPL 欄位小於源運算元的,則 ZF 標誌設定為 1;否則清除為 0。
#GP(0) - 如果目標位於不可寫的段。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS、或 GS 暫存器用於訪問記憶體,並且它包含空的段選擇器。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。
#UD - ARPL 指令在實地址模式中無法識別。
#UD - ARPL 指令在虛 8086 模式中無法識別。