本系列文章由jadeshu编写,转载请注明出处。http://blog.csdn.net/jadeshu/article/details/22309359

作者:jadeshu   邮箱: jadeshu@qq.com    欢迎邮件交流

X86实模式下

在实模式下,寻址一个内存地址主要是使用段和偏移值,段值被存放在段寄存器中(如ds),并且段的长度被固定为64KB。段内偏移地址存放在任意一个可用于寻址的寄存器中(如si)。因此,根据段寄存器和偏移寄存器中的值,就可以算出实际指向的内存地址 

X86 32位保护模式

在保护模式运行方式下,段的寄存器中存放不再是被寻址段的基地址,而是一个段描述符表(Segment Descriptor Table)中某一描述符项在表中的索引值。索引值指定的段描述符项中含有需要寻址的内存段的基地址、段的长度值和段的访问特权级别等信息。寻址的内存位置是由该段描述符项中指定的段基地址值与一个段内偏移值组合而成。段的长度可变,由描述符中的内容指定。可见,和实模式下的寻址相比,段寄存器值换成了段描述符表中相应段描述符的索引值以及段表选择位和特权级,称为段选择符(Segment Selector),但偏移值还是使用了原实模式下的概念。这样,在保护模式下寻址一个内存地址就需要比实模式下多一个环节,即需要使用段描述符表。这是由于在保护模式下访问一个内存段需要的信息比较多,而一个16位的段寄存器放不下这么多内容。

示意图如下图所示。注意,如果你不在一个段描述符中定义一个内存线性地址空间区域,那么该地址区域就完全不能被寻址,CPU将拒绝访问该地址区域。因而得到了保护,由此而得名

最新文章

  1. http参数的封装(后台接受参数的场景)
  2. svg学习(九)path
  3. js之数据类型
  4. Docker入门教程(九)10个镜像相关的API
  5. 解决:Ubuntu12.04下使用ping命令返回ping:icmp open socket: Operation not permitted的解决
  6. Qt实现桌面动态背景雪花飘落程序
  7. 工作总结:文件对话框的分类(C++)
  8. FC网络学习笔记02 -网络配置方法
  9. angularJS的controller之间如何正确的通信
  10. node-http-proxy修改响应结果
  11. 基于MDK的ARM-GCC开发环境建立及新唐M0的HID类设备的C++开发
  12. Gradle 载入中 Android 下一个.so档
  13. 将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)
  14. 在CentOS 7中安装Jetty服务器
  15. springMVC框架核心方法调用源码解析
  16. RxJava2
  17. 【C++】如何接收函数return返回来的数组元素
  18. 2017年前小纪(有关http的一些缓存理论知识)
  19. 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
  20. 【宣讲】德州科技职业学院宣讲关于IT领域趋势分析

热门文章

  1. R|批量循环处理同一格式文件-csv,txt,excel
  2. c#学习笔记-深度复制 与浅度复制
  3. JS/js是什么?
  4. Eclipse中如何创建一个完整的Maven-Web项目
  5. DNSMaper 一款子域名枚举与地图标记工具
  6. Dell T30解决报Alert! Cover was previously removed.
  7. Jupyter notebook部署引导
  8. Tomcat 启动闪退解决
  9. Ubuntu系统---安装English版本之后的一些工作
  10. YOLO---多个版本的简单认识