`

(第三章 10)“代码段间跳转” 和 “访问数据段”

 
阅读更多


下面说明代码段和数据段的访问:


一、代码段间跳转


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

  • 描述: 通过调用门跳转的特权级检查
  • 大小: 14.4 KB
分享到:
评论

相关推荐

    新浪 IP 库限制指定地区跳转和不跳转代码

    首先,理解“新浪 IP 库限制指定地区跳转和不跳转代码”意味着你需要一段 JavaScript 代码,这段代码能够检测访问者的 IP 地址,并根据 IP 地址判断其所在地区。如果访问者位于指定的限制区域内,代码会执行跳转操作...

    微机原理、汇编与接口技术(朱定华 编著)第三章习题参考答案二

    ### 微机原理、汇编与接口技术第三章习题参考答案分析 #### 3.8 编写程序,将字节变量BVAR中的无符号二进制数(0~0FFH)转换为BCD数,并在屏幕上显示结果。 **解析**: 此题目要求实现一个简单的汇编程序,其功能...

    第7章 高级汇编语言程序设计.doc

    3. 创建段间跳转宏,确保CS寄存器加载正确的代码段选择子。 4. 打开A20地址线,允许访问超过1MB的内存。 5. 修改CR0寄存器,设置其第0位,激活保护模式。 7.1.2.2 从保护模式切换回实模式 回转过程包括: 1. 清除CR...

    php页面自动跳转的几种实现方法

    此代码段演示了如何在表单提交成功后根据条件选择性地跳转到不同的页面。需要注意的是,当页面包含 HTML 内容时,`header` 函数应该在 `&lt;html&gt;` 标签之前调用。 #### 三、使用 JavaScript 除了上述两种方法外,还...

    Verilog数字系统设计教程第17章RISC-CPU代码

    综上所述,学习Verilog数字系统设计教程第17章RISC-CPU代码,意味着你需要掌握RISC架构的基本原理,理解CPU内部各模块的功能,以及如何使用Verilog语言描述和实现这些模块。这将帮助你构建自己的数字系统,特别是在...

    汇编实验(1)从键盘上接收三个一位十进制数,选出其中最小值显示出来。; (2) 已知当前数据段中 DATA1 和 DATA2 开始分别存放若干字节数据, 数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示 1,否则显示 0;

    - `DATAS`和`CODES`定义了数据段和代码段。 - `ASSUME CS:CODES, DS:DATAS`指定了代码段和数据段的位置。 - `START:`标签表示程序的开始位置。 5. **程序流程控制** - `NEXT1`, `NEXT2`, `NEXT3`, `NEXT4`等...

    C++Primer 中文版第五版 习题代码实现 第一章

    《C++ Primer 中文版第五版 习题代码实现 第一章》是一个针对初学者和有一定基础的C++程序员的学习资源,旨在通过实践加深对C++语言的理解。本章节主要涵盖了C++的基础知识,包括变量、基本数据类型、运算符、输入/...

    北大青鸟 ACCP5.0 S2 C# 第一章课后阶段和作业答案

    【北大青鸟 ACCP5.0 S2 C# 第一章课后阶段和作业答案】是针对北大青鸟教育机构的ACCP5.0第二学期(S2)C#编程语言学习者设计的一系列练习题及其解答。这个课程旨在帮助初学者深入理解和掌握C#的基础知识,为后续更...

    JAVA【第3章:Java基础程序设计】_Java数据类型

    在Java编程语言中,数据类型是程序设计的基础,它们决定了变量可以存储的值的种类和范围。本章将深入探讨Java中的数据类型,分为两大类:基本数据类型和引用数据类型。 1. 基本数据类型: - 整型:Java提供了四种...

    编译 原理 第四章 语义分析 中间代码 生成 课后 答案

    《编译原理》第四章主要讨论的是语义分析和中间代码生成这两个关键步骤。语义分析是编译过程中的一个重要阶段,它关注程序的意义,确保程序的语法正确性的同时,检查程序的语义是否符合语言的规则。中间代码生成则是...

    易语言对象获取跳转页面

    这段代码首先发送GET请求到"example.com",然后查找并提取出第一个`&lt;a&gt;`标签的`href`属性,最后再次发起请求到跳转的URL。 总结,易语言对象获取跳转页面涉及到对象编程、网络请求和HTML解析等技术。理解并掌握这些...

    JSP应用开发详解第三版 源代码 ch19

    《JSP应用开发详解第三版》是一本深入探讨JavaServer Pages (JSP)技术的专业书籍,其中第十九章的源代码提供了丰富的实例和实践指导,帮助读者深化对JSP编程的理解。这一章节可能涵盖了诸如动态网页开发、Servlet...

    计算机原理课件第三章汇编PPT资料.pptx

    在第三章的汇编PPT资料中,主要涉及了两个核心概念:DOS下的过程调用和数据块的传送。 1. **DOS过程调用**: 在DOS环境下,程序的执行通常涉及到过程调用,这是通过在内存中设置栈来实现的。在DOS中,有两种推荐的...

    布尔跳转指令汇编源文件1

    在汇编语言编程中,通常会将程序分为不同的段(Segment),包括代码段(Code Segment)和数据段(Data Segment)。代码段用于存放程序的指令,而数据段则用于存放变量。 本例中的`myprog SEGMENT CODE`声明了一个名...

    10_尚硅谷_书城项目-第三阶段代码优化_王振国 - 课堂笔记1

    在第三阶段的书城项目中,开发者将HTML页面转换为JSP页面,以实现更高级的服务器端功能。在HTML页面顶行添加`&lt;%@ page %&gt;`指令,这是JSP的page指令,用于定义JSP页面的属性,如语言、导入的包等。同时,将文件后缀名...

    C 语言谭浩强三版第三章~十章笔记.doc

    ### C语言谭浩强第三版第三章至第十章核心知识点概览 #### 数据类型、运算符与表达式 - **常量与变量** - 常量:在程序执行过程中,其值不会改变的量,可以直接引用。 - 变量:值可变的量,需先定义后使用,分为...

    M0 程序指针跳转

    一旦设置完成,Bootloader会将控制权交给UpdateLEDTest的代码段,通过将程序计数器设置为UpdateLEDTest的入口地址来实现跳转。 在实际操作中,这可能涉及到以下步骤: 1. 初始化中断控制器,使能相关的中断源。 2. ...

Global site tag (gtag.js) - Google Analytics