x86保护模式 二 分段管理机制】的更多相关文章

分段管理机制 段选择子和偏移地址的二维虚拟地址转换为一维的线性地址 一  段定义和虚拟地址到线性地址的转换 三个参数定义段:段基地址    段界限  和段属性    同时也是段描述符的结构 段基地址为段的开始地址   386下为32位   可以在线性地址空间中的任何一个字节开始 段界限规定段的大小    保护模式下用20位表示     段界限的单位分为字节和4k字节两种    由段属性中的g位表示    粒度值为0是字节   为1是4k字节 字节单位  则界限为从1到1m(2的20次方) 4k字…
x86   保护模式  十  分页管理机制 8.386开始支持分页管理机制 段机制实现虚拟地址到线性地址的转换,分页机制实现线性地址到物理地址的转换.如果不启用分页,那么线性就是物理地址 一  分页管理简介 cr0中的pg位=1   分页生效,将线性地址转换为物理地址. 只有在保证pe位为1的情况下  才能使pg位为1  否则将引起通用保护故障. 分页机制将线性地址空间和物理地址空间分别划分为大小相同的块.这样的块称为页.线性的页和物理的页之间建立映射,完成线性到物理地址的转换.线性地址空间的页…
x86保护模式     实模式与保护模式切换实例 实例一 逻辑功能   以十六进制数的形式显示从内存地址110000h开始的256个字节的值    实现步骤: 1  切换保护方式的准备 2. 切换到保护方式 3. 把指定内存区域的内容传送到位于常规内存的缓冲区中 4. 切换回实模式 5. 显示缓冲区内容   代码: 386保护模式汇编语言程序用到的包含文件如下所示,该包含文件在后面的程序中还要用到. ;名称:386SCD.INC ;功能:符号常量等的定义 ;-------------------…
x86保护模式    任务状态段和控制门 每个任务都有一个任务状态段TSS     用于保存任务的有关信息     在任务内权变和任务切换时  需要用到这些信息    任务内权变的转移和任务切换  一般需要通过控制门进行这些转移. <一>   系统段描述符 系统段是为了实现存储管理机制所使用的一种特别的段 任务状态段TSS和局部描述符表LDT段   用于描述系统段的描述符成为系统段描述符 1.描述符格式 与存储段描述符类似   区别位属性字节中的描述符类型为DT的值 DT=1为存储段    D…
X86保护模式  八操作系统类指令 通常在操作系统代码中使用,应用程序中不应用这些指令 指令分为三种:实模式指令,任何权级下使用的指令.实模式权级0下可执行的指令和仅在保护模式下执行的指令 一  实模式和任务特权级下可执行的指令 1.存储全局和中断描述符表寄存器指令 利用存储描述符表寄存器指令能把描述符表寄存器的内容保存到指定的存储单元.与GDT与IDT被所有任务共享不同,LDT是每个任务私有的.所以存储局部描述符表寄存器的LDTR的指令不在所列 a) 存储全局描述符表寄存器指令 SGDT QW…
x86保护模式-七中断和异常 386相比较之前的cpu   增强了中断处理能力   并且引入了 异常概念 一 80386的中断和异常 为了支持多任务和虚拟存储器等功能,386把外部中断称为中断    把内部中断称为异常 最多支持256中断或异常 1.中断 中断是由异步的外部事件引起的.外部事件及中断响应与正执行的指令没有关系. 通常中断对应i/o操作的完成,cpu中intr引脚接受外部的可屏蔽的中断请求,NMI引脚接受外部不可屏蔽的中断请求. EFLAGS标志寄存器中的IF标志决定是否屏蔽可屏蔽…
控制寄存器和系统地址寄存器 控制寄存器    crx cr0   指示cpu工作方式的控制位  包含启用和禁止分页管理机制的控制位  包含控制浮点协处理器操作的控制位   注意必须为0的位 cr2和cr3   分页管理机制使用    1.保护控制位 cr0中位0  pe表示  为0实模式   为1  保护模式 位31 pg表示 为0 禁用分页      为1启用分页管理机制 注意1.不存在   pe为0  且pg为1的情况   即   实模式下开启分页机制 2.改变pg位     只有当所执行的…
控制转移可以分为两大类  :同一任务内的控制转移    和   任务间的控制转移(任务切换) 同一个任务内的控制转移可以分为段内转移 .特权级不变的段间转移和特权级改变的段间转移 段内转移与实模式相同 不涉及特权级变换和任务切换  只有段间转移才涉及特权级变换和任务切换任务  重点为任务内的特权级变换和任务间的切换   一 任务内无特权级变换的转移 1.段间转移指令 jmp  call    ret    int    iret   都具有段间转移功能   另外中断和异常也将引起段间转移   其…
以测试用例驱动项目开发,coding/case俩条线并走模式.   1.开发人员只负责功能实现:   2.测试人员提供自测用例,研发人员jenkins持续集成项目后自动化执行自测用例,通过后方可转测试渗入测试.   3.Open-Test 分俩个功能块,test用例块与controller执行块:     test用例块:     1.定义接口 2.定义返回码  截图:       controller执行块:     1.实现用例 2.绑定请求 3.针对用例渗入测试 截图:     4.单接口…
整个代码对应内存线性地址分为四段,[gdt] [code32] [video32] [code16] 代码先在实模式[code16]下运行,code16中的cs就是系统分配的该程序物理地址的基址. 编译器会自动把其他段中的标号,编译成相对这个物理地址基址的偏移量. 其他段的物理真实地址就是这个基址+标号所表示的偏移量. label_begin  label_code32这些是标签,会编译成相对该程序物理地址基址的偏移量. 程序在内存中以二进制存在,cs指向程序在内存中开始的地方. Gdtptr…