匯編學習筆記(20) - 特權指令


 

 

小結:

  1. 除CRX 和 DRX兩組寄存器外,其他都是 寫需要特權級 讀不需要特權級
  2. 實模式 只能操作 GDT IDT 和 CRX 和 DRX兩組寄存器
  3. CRX 和 DRX這兩組寄存器的所有操作都需要特權

 

寄存器讀寫指令

48位的段寄存器

格式: 

SGDT DST,LGDT SRC,SIDT DST,LIDT SRC

 

說明:

分別是GDT和IDT的讀寫指令

S =SAVE , 將寄存器內容保存到內存那種

L = LOAD, 從內存中加載數據到寄存器

因為這幾個寄存器都是48的,所以不能直接使用其他的寄存器,只能內存尋址 

 

舉例:

SGDT [AX]

LIDT [AX] 

 

內存中的格式:

       段界限

  段地址

 

16位的段寄存器

格式:

SLDT DST,  LLDT SRC, STR DST, LTR SRC

說明:

分別是LDT和TR的讀寫指令

S =SAVE , 將寄存器內容保存到內存那種

L = LOAD, 從內存中加載數據到寄存器

因為這幾個寄存器都是16的,所以可以使用常規的尋址方式

 

舉例:

SLDT AX

LIDT [AX]

 

CRX, DRX

這兩組寄存器是控制寄存器和調試寄存器,他們都使用普通的MOV指令,注意只能寄存器尋址,不能內存尋址

格式

MOV CR0, EAX

MOV EAX, CR0

 

其他控制指令:

CLTS  

格式

CLTS

作用

清理CR0中TS位

 

HLT 

格式

HLT

說明

使CPU暫停,直到觸發中斷或者CPU被復位或重啟

 

其他測試指令:

  ARPL

格式:

ARPL OPRD1, OPRD2   

 

說明:

此指令是用來測試OPRD1作為選擇子時候的特權級的

if( OPRD1.RPL < OPRD2.RPL )
{
    OPRD1.RPL = OPRD2.RPL 
    ZF = 1 
}
else{
    ZF = 0
}

LAR

格式:

LAR OPRD1, OPRD2      

 

說明:

OPRD2 作為選擇子的指向的表項的屬性段賦值給 OPRD1  成功ZF =1, 失敗 ZF = 0,此函數會有權限檢查

 

LSL

格式:

LSL OPRD1,  OPRD2     

說明:

OPRD2 作為選擇子的指向的表項的段界限賦值給 OPRD1 成功ZF =1, 失敗 ZF = 0,此函數會有權限檢查

 

VERR

格式:

VERR   OPRD     

說明:

判斷在當前權限下對OPRD作為選擇子指向的段是否具有讀權限 可讀ZF =1, 失敗或不可讀 ZF = 0,此函數會有權限檢查

 

VERW

格式:

VERW  OPRD   

說明:

判斷在當前權限下對OPRD作為選擇子指向的段是否具有寫權限 可讀ZF =1, 失敗或不可寫 ZF = 0,此函數會有權限檢查

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM