cs寄存器 x86 特权模式_操作系统-保护模式中的特权级

本文深入探讨了x86保护模式中的特权级,包括四个特权级别0、1、2、3,以及CPL、DPL和RPL的概念。文章通过代码示例解释了代码段的DPL属性对于执行的重要性,强调了从高特权级到低特权级跳转的限制。此外,还介绍了选择子的RPL如何影响段访问,并通过实验展示了不同特权级间跳转的规则和异常情况。
摘要由CSDN通过智能技术生成

一.保护模式中的特权级(上)

A.保护模式小结

a.使用选择子访问段描述符表时,索引值的合法性检测

1.当索引值越界时,引发+异常

2.判断的规则是:索引值 x8+7<=段描述表界限值

b.内存段类型合法检测性

1.具备可执行属性的段(代码段)只能加载到CS寄存器

2.具备可写属性的段(数据段)才能加载到SS寄存器

3.具备只读属性的段才能加载到DS,ES,FS,GS寄存器

c.代码段和数据段的保护

1.处理器每访问一个地址都要确认该地址不超过界限值

2.判断规则:代码段:IP+指令长度<=代码段界限;数据段:访问起始地址+访问数据长度<=数据段界限

在这里需要注意的是:保护模式中代码中定义的界限值通常为:最大偏移地址值(相对于段基地址)

d.代码示例

%include "inc.asm"

org 0x9000

jmp ENTRY_SEGMENT

[section .gdt]

; GDT definition

; ¶Î»ùÖ·£¬ ¶ÎœçÏÞ£¬ ¶ÎÊôÐÔ

GDT_ENTRY : Descriptor 0, 0, 0

CODE32_DESC : Descriptor 0, Code32SegLen - 1, DA_C + DA_32

VIDEO_DESC : Descriptor 0xB8000, 0x07FFF, DA_DRWA + DA_32

DATA32_DESC : Descriptor 0, Data32SegLen - 1, DA_DR + DA_32

STACK32_DESC : Descriptor 0, TopOfStack32, DA_DRW + DA_32

; GDT end

GdtLen equ $ - GDT_ENTRY

GdtPtr:

dw GdtLen - 1

dd 0

; GDT Selector

Code32Selector equ (0x0001 << 3) + SA_TIG + SA_RPL0

VideoSelector equ (0x0002 <<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值