- 浏览: 543439 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (231)
- 一个操作系统的实现 (20)
- 汇编(NASM) (12)
- Linux编程 (11)
- 项目管理 (4)
- 计算机网络 (8)
- 设计模式(抽象&封装) (17)
- 数据结构和算法 (32)
- java基础 (6)
- UML细节 (2)
- C/C++ (31)
- Windows (2)
- 乱七八糟 (13)
- MyLaB (6)
- 系统程序员-成长计划 (8)
- POJ部分题目 (10)
- 数学 (6)
- 分布式 & 云计算 (2)
- python (13)
- 面试 (1)
- 链接、装载与库 (11)
- java并行编程 (3)
- 数据库 (0)
- 体系结构 (3)
- C++ template / STL (4)
- Linux环境和脚本 (6)
最新评论
-
chuanwang66:
默默水塘 写道typedef void(*Fun)(void) ...
C++虚函数表(转) -
默默水塘:
typedef void(*Fun)(void);
C++虚函数表(转) -
lishaoqingmn:
写的很好,例子简单明了,将观察者模式都表达了出来。
这里是ja ...
观察者模式——Observer
下面说明代码段和数据段的访问:
一、代码段间跳转
1、普通(直接)跳转:
JMP Selector:0 或 CALL Selector:0
1)一致代码段(JMP&CALL)
要求:CPL>=DPL,RPL不作检查
特权变化:跳转后程序CPL=跳转前程序CPL
2)非一致代码段(JMP&CALL)
要求:CPL=DPL & RPL<=DPL
特权变化:跳转后程序CPL=目标代码段DPL
2、通过调用门跳转:
JMP 调用门Selector:0 或 CALL 调用门Selector:0 (注意:此时如果选择子后面跟着32位偏移量也不会被CPU使用,因为调用门描述符已经记录了目标代码的偏移)
step1: 要求:指示调用门的选择子的RPL<=门描述符DPL & 当前代码段的CPL<=门描述符的DPL。
只有满足以上条件时,CPU才会进一步从调用门描述符中读取代码段的选择子或地址偏移。而从调用门中读取代码选择子和地址偏移后,跟普通跳转又站在同一起跑线上了。
唯一不同的是CPU会将目标代码段RPL清0。此后需要分类讨论,如下:
step2:
1)一致代码段(JMP&CALL) <------------------------------------------------------------------------------------------------------
要求:CPL>=DPL,RPL不作检查(因为RPL总被清0) |
特权变化:跳转后程序CPL=跳转前程序CPL |
比较
2)非一致代码段(JMP) |
要求:CPL=DPL,RPL不作检查(因为RPL总被清0) |
特权变化:跳转后程序CPL=目标代码段DPL |
3)非一致代码段(CALL) <------------------------------------------------------------------------------------------------------------
要求:CPL>=DPL,RPL不作检查(因为RPL总被清0)
特权变化:跳转后程序CPL=目标代码段DPL(CPL>DPL的情况下,特权级发生跃迁)
二、访问数据段
数据段:特权级低->高:NO | 特权级高->低:YES | 特权级同级之间:YES
注意:
1、一致代码段:无论那种方式跳转到一致代码段,CPL都不会改变(不变化为目标代码段的DPL),也即加载目标代码段选择子时,只加载高14位,表示CPL的低2位保持不变。
因此,“一致”的意思就是——代码段被调用执行时,不使用自己描述符的DPL,而采用调用这特权级,CS的低2位保持不变(与“调用者保持一致”)
2、非一致代码段:无论采用哪种方式跳转到非一致代码段,CPL都发生变化,也即在加载目标代码段选择子时,将整个选择子放入到CS中。
3、为了访问调用门,调用者程序的特权级CPL必须小于或等于调用门的DPL。调用门段选择符的RPL也要同调用CPL一样遵守相同的规则,即RPL也必须小于或等于调用门的DPL。如图:
参考:
http://www.cnblogs.com/wanghj-dz/archive/2011/04/23/2025840.html
- CPL_RPC_DPL.pdf (172.8 KB)
- 下载次数: 4
- 特权级CPL_RPL_DPL.pdf (202 KB)
- 下载次数: 5
发表评论
-
(第三章 8 )特权级——保护模式的特权级检查(DPL,RPL,CPL, 一致代码段,非一致代码段)
2013-03-20 11:14 2365特权级是保护模式下一个重要的概念,CPL,RPL和 ... -
(第6章 1)最简单的进程
2012-10-11 10:56 1034第一步——ring0 --> ring1 ... -
(第4章 2)突破512字节的限制
2012-09-15 11:40 2791一、代码 ... -
(第4章 1)软盘结构及其数据读取
2012-09-14 21:59 1939参考资料: http://blog.cs ... -
(第三章 12)中断
2012-09-11 20:20 1032一、中断和8259A中断控制器 1. ... -
(第三章 8 )特权级——CPL、DPL、RPL
2012-07-11 10:02 2407很久以后,等我大量翻阅关于“保护模式的特权级检 ... -
(第三章 0)保护模式如何“保护”
2012-03-14 07:59 1082IA32中“保护模式”的“保护”二字理解:(P48) ... -
(第一、二章)nasm的汇编和反汇编
2012-02-27 13:36 4973nasm的汇编和反汇编 步骤: 1. 汇编(bo ... -
(第三章 14)克勤克俭用内存——初始化页目录表、页表,开启分页机制
2011-07-22 11:30 249在启动分页机制SetupPaging之前,先调用了Di ... -
(第三章 13)克勤克俭用内存——查看内存块
2011-07-22 09:25 143[SECTION .data1] ALIGN 32 ... -
(第三章 12)克勤克俭用内存——显示字符串
2011-07-21 16:25 116DispStr调用方法: [SECTION . ... -
(第三章 11)根据自己内存情况 使用分页机制
2011-06-11 15:51 1474一、查看内存分布情况 设置“页目录表”和“页 ... -
参考博客-还有哪些人也在看这本书
2011-06-10 22:46 1364这位很详细: http://www.cnblogs.com/ ... -
(第三章 9)通过调用门进行有特权级变换的转移(二)
2011-06-08 11:29 191本文展示《(第三章 9)通过调用门进行有特权级变换的转移(一) ... -
(第三章 9)“调用门” 和 “利用调用门在高低特权级的转移”
2011-06-08 10:34 2685在此之前,先要熟悉汇编指令“长/短jmp”、“长/短c ... -
(第三章 7)LDT
2011-06-06 09:49 1511先展示一下效果图: 直接看代码: ... -
(第三章 6)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(二)
2011-06-06 09:15 1484三、关于保护模式和实 ... -
(第三章 5)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(一)
2011-06-05 13:53 2072一、主要功能 ... -
(第三章 3)数据段/代码段描述符
2011-06-05 11:53 2252一、宏定义和属性常量 (代码段/数据段描述符见P32;门描述 ... -
(第三章 4)A20地址线
2011-06-03 20:43 2066A20地址线困惑我了很久,这篇文章终于揭开了这个谜 ...
相关推荐
首先,理解“新浪 IP 库限制指定地区跳转和不跳转代码”意味着你需要一段 JavaScript 代码,这段代码能够检测访问者的 IP 地址,并根据 IP 地址判断其所在地区。如果访问者位于指定的限制区域内,代码会执行跳转操作...
### 微机原理、汇编与接口技术第三章习题参考答案分析 #### 3.8 编写程序,将字节变量BVAR中的无符号二进制数(0~0FFH)转换为BCD数,并在屏幕上显示结果。 **解析**: 此题目要求实现一个简单的汇编程序,其功能...
3. 创建段间跳转宏,确保CS寄存器加载正确的代码段选择子。 4. 打开A20地址线,允许访问超过1MB的内存。 5. 修改CR0寄存器,设置其第0位,激活保护模式。 7.1.2.2 从保护模式切换回实模式 回转过程包括: 1. 清除CR...
此代码段演示了如何在表单提交成功后根据条件选择性地跳转到不同的页面。需要注意的是,当页面包含 HTML 内容时,`header` 函数应该在 `<html>` 标签之前调用。 #### 三、使用 JavaScript 除了上述两种方法外,还...
综上所述,学习Verilog数字系统设计教程第17章RISC-CPU代码,意味着你需要掌握RISC架构的基本原理,理解CPU内部各模块的功能,以及如何使用Verilog语言描述和实现这些模块。这将帮助你构建自己的数字系统,特别是在...
- `DATAS`和`CODES`定义了数据段和代码段。 - `ASSUME CS:CODES, DS:DATAS`指定了代码段和数据段的位置。 - `START:`标签表示程序的开始位置。 5. **程序流程控制** - `NEXT1`, `NEXT2`, `NEXT3`, `NEXT4`等...
《C++ Primer 中文版第五版 习题代码实现 第一章》是一个针对初学者和有一定基础的C++程序员的学习资源,旨在通过实践加深对C++语言的理解。本章节主要涵盖了C++的基础知识,包括变量、基本数据类型、运算符、输入/...
【北大青鸟 ACCP5.0 S2 C# 第一章课后阶段和作业答案】是针对北大青鸟教育机构的ACCP5.0第二学期(S2)C#编程语言学习者设计的一系列练习题及其解答。这个课程旨在帮助初学者深入理解和掌握C#的基础知识,为后续更...
在Java编程语言中,数据类型是程序设计的基础,它们决定了变量可以存储的值的种类和范围。本章将深入探讨Java中的数据类型,分为两大类:基本数据类型和引用数据类型。 1. 基本数据类型: - 整型:Java提供了四种...
《编译原理》第四章主要讨论的是语义分析和中间代码生成这两个关键步骤。语义分析是编译过程中的一个重要阶段,它关注程序的意义,确保程序的语法正确性的同时,检查程序的语义是否符合语言的规则。中间代码生成则是...
这段代码首先发送GET请求到"example.com",然后查找并提取出第一个`<a>`标签的`href`属性,最后再次发起请求到跳转的URL。 总结,易语言对象获取跳转页面涉及到对象编程、网络请求和HTML解析等技术。理解并掌握这些...
《JSP应用开发详解第三版》是一本深入探讨JavaServer Pages (JSP)技术的专业书籍,其中第十九章的源代码提供了丰富的实例和实践指导,帮助读者深化对JSP编程的理解。这一章节可能涵盖了诸如动态网页开发、Servlet...
在第三章的汇编PPT资料中,主要涉及了两个核心概念:DOS下的过程调用和数据块的传送。 1. **DOS过程调用**: 在DOS环境下,程序的执行通常涉及到过程调用,这是通过在内存中设置栈来实现的。在DOS中,有两种推荐的...
在汇编语言编程中,通常会将程序分为不同的段(Segment),包括代码段(Code Segment)和数据段(Data Segment)。代码段用于存放程序的指令,而数据段则用于存放变量。 本例中的`myprog SEGMENT CODE`声明了一个名...
在第三阶段的书城项目中,开发者将HTML页面转换为JSP页面,以实现更高级的服务器端功能。在HTML页面顶行添加`<%@ page %>`指令,这是JSP的page指令,用于定义JSP页面的属性,如语言、导入的包等。同时,将文件后缀名...
### C语言谭浩强第三版第三章至第十章核心知识点概览 #### 数据类型、运算符与表达式 - **常量与变量** - 常量:在程序执行过程中,其值不会改变的量,可以直接引用。 - 变量:值可变的量,需先定义后使用,分为...
一旦设置完成,Bootloader会将控制权交给UpdateLEDTest的代码段,通过将程序计数器设置为UpdateLEDTest的入口地址来实现跳转。 在实际操作中,这可能涉及到以下步骤: 1. 初始化中断控制器,使能相关的中断源。 2. ...