zoukankan      html  css  js  c++  java
  • 汇编学习笔记(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,此函数会有权限检查

  • 相关阅读:
    CSS
    HTML
    MySQL:PyMySQL&ORM
    MySQL:SQL进阶
    03-body标签中相关标签
    02-body标签中相关标签
    01-html介绍和head标签
    并发编程
    异常处理、网络编程
    面向对象进阶和模块
  • 原文地址:https://www.cnblogs.com/alwaysking/p/12347682.html
Copyright © 2011-2022 走看看