转载:

https://blog.csdn.net/xiaominthere/article/details/17484087

8086处理器引入了一个重要概念--段。(目标,想要的结果)8086处理器的寻址目标是1M大的内存空间,于是它的地址总线扩展到了20位。但是,一个问题摆在了Intel设计人员面前,(问题)虽然地址总线宽度是20位的,但是CPU中“算术逻辑运算单元(ALU)”的宽度,即数据总线却只有16位,也就是可直接加以运算的指针长度是16位的。如何填补这个空隙呢?可能的解决方案有多种,例如,可以像一些8位CPU中那样,增设一些20位的指令专用于地址运算和操作,但是那样又会造成CPU内存结构的不均匀。又例如,当时的PDP-11小型机也是16位的,但是其内存管理单元(MMU)可以将16位的地址映射到24位的地址空间。受此启发,(解决方案)Intel设计了一种在当时看来不失为巧妙的方法,即分段的方法。

为了支持分段,Intel在8086 CPU中设置了四个段寄存器:CS、DS、SS和ES,分别用于可执行代码段、数据段、堆栈段及其他段。每个段寄存器都是16位的,对应于地址总线中的高16位。每条“访内”指令中的内部地址也都是16位的,但是在送上地址总线之前,CPU内部自动地把它与某个段寄存器中的内容相加。因为段寄存器中的内容对应于20位地址总线中的高16位(就是把段寄存器左移4位),所以相加时实际上是内存总线中的高12位与段寄存器中的16位相加,而低4位保留不变,这样就形成一个20位的实际地址,也就实现了从16位内存地址到20位实际地址的转换,或者叫“映射”。段式内存管理带来了显而易见的优势,程序的地址不再需要硬编码了,调试错误也更容易定位了,更可贵的是支持更大的内存地址。程序员开始获得了自由。

技术的发展不会就此止步。intel的80286处理器于1982年问世了,它的地址总线位数增加到了24位,因此可以访问到16M的内存空间。更重要的是从此开始引进了一个全新理念--保护模式。这种模式下内存段的访问受到了限制。访问内存时不能直接从段寄存器中获得段的起始地址了,而需要经过额外转换和检查。为了和过去兼容,80286内存寻址可以有两种方式,一种是先进的保护模式,另一种是老式的8086方式,被成为实模式。系统启动时处理器处于实模式,只能访问1M空间,经过处理可进入保护模式,访问空间扩大到16M,但是要想从保护模式返回到实模式,你只有重新启动机器。还有一个致命的缺陷是80286虽然扩大了访问空间,但是每个段的大小还是64k,程序规模仍受到限制。因此这个先天低能儿注定寿命不会很久。很快它就被天资卓越的兄弟--80386代替了。

80386是一个32位的CPU,也就是它的ALU数据总线是32位的,同时它的地址总线与数据总线宽度一致,也是32位,因此,其寻址能力达到4GB。对于内存来说,似乎是足够了。从理论上说,当数据总线与地址总线宽度一致时,其CPU结构应该简洁明了。但是,80386无法做到这一点。作为X86产品系列的一员,80386必须维持那些段寄存器的存在,还必须支持实模式,同时又要能支持保护模式,这给Intel的设计人员带来很大的挑战。Intel选择了在段寄存器的基础上构筑保护模式,并且保留段寄存器16位。在保护模式下,它的段范围不再受限于64K,可以达到4G。这一下真正解放了软件工程师,他们不必再费尽心思去压缩程序规模,软件功能也因此迅速提升。

从8086的16位到80386的32位处理器,这看起来是处理器位数的变化,但实质上是处理器体系结构的变化,从寻址方式上说,就是从“实模式”到“保护模式”的变化。从80386以后,Intel的CPU经历了80486、Pentium、PentiumII、PentiumIII等型号,虽然它们在速度上提高了好几个数量级,功能上也有不少改进,但基本上属于同一种系统结构的改进与加强,而无本质的变化,所以我们把80386以后的处理器统称为IA32(32 Bit Intel Architecture)。

80x86段寻址的原因相关推荐

  1. PAT1050 螺旋矩阵 (25 分)【全部通过 关于段错误的原因 以及测试点7】

    心得 思路:一个0~10000的数写成M*N的形式,且M>N,则M的范围是0~10000,N的范围是0~100 这个对于m,n的判断很重要,因为二维数组不能开的太大,10000*10000会显示 ...

  2. 段错误产生原因及简单的调试方法

    参考:段错误产生原因及简单的调试方法 作者:编程那些年 网址:https://mp.weixin.qq.com/s/KP9ZFn71CO_vB2I4igZLMA 段错误产生原因 1.访问不存在的内存地 ...

  3. 2021-01-07关于Linux段错误的原因和解决办法(初学者)

    初学者Linux出现段错误的原因和解决办法 一.使用非法指针(内存地址),包括未经初始化的野指针和内存已经释放的指针.不存在的地址.受系统保护的地址或只读地址.(此类段错误最常见) 解决办法: GDB ...

  4. Segmentation fault段错误出现原因分析及解决方法笔记

    Segmentation fault段错误出现原因分析及解决方法 1.局部变量的大小过大,超过栈分配的空间导致段错误,如double a[500][500], 解决方法:大数据不要放在栈区中,可以考虑 ...

  5. linux下运行程序后出现段错误的原因和解决案例

    转自:http://blog.csdn.net/sunstars2009918/article/details/7094025 查了不少资料,好多都说是:地址错误,即你使用了没有声明的地址. 一 一个 ...

  6. 段错误产生原因及调试总结

    一.段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况. 二.段错误产生的原因 1. ...

  7. 出战卡不足_造成你卡段的五大原因,如果不够重视,你将很难进步

    #瓦罗兰特电竞赛# 最近从评论区看到一个很奇怪的现象,很多小伙伴把卡段,连跪都归咎于匹配机制和队友.可是事实真是如此吗? 不可否认,如今坑的队友不少,但是全都匹配给你了?对面也会有,为什么对方能赢?再 ...

  8. 操作系统内核Hack:(二)底层编程基础

    操作系统内核Hack:(二)底层编程基础 在<操作系统内核Hack:(一)实验环境搭建>中,我们看到了一个迷你操作系统引导程序.尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识 ...

  9. java 主动抛出 段错误_段错误产生的原因~

    原文:https://blog.csdn.net/qq_29350001/article/details/53780697 一.什么是段错误? 一旦一个程序发生了越界访问,cpu 就会产生相应的保护, ...

  10. Linux下的段错误产生的原因及调试方法-转

    分类: Linux--Ubuntu入门级 重学C/C++2011-10-19 22:13 332人阅读 评论(0) 收藏 举报 因为你调用了glibc的fputs 检查你传进去的char* +++++ ...

最新文章

  1. Lumion模型库 Unique Pro Lumion Library 2021
  2. 使用Epoll 能监听普通文件吗?
  3. vue页面翻页勾选的记忆功能
  4. selenium作业题
  5. Python矩阵处理库—Numpy库的基本使用
  6. java不朽神迹,不朽的神迹 Eternal Legacy HD v1.0.8
  7. rough and crude
  8. 《深入理解JVM.2nd》笔记(一):走进Java
  9. Element UI table组件源码分析
  10. machinery入门看这一篇(异步任务队列)
  11. 实战经验:Oracle recyclebin过大导致的Insert逻辑读暴增问题的解决
  12. 会员登录 php,php $_SESSION会员登录实例分享
  13. idea 热部署_Spring Boot Idea中热部署(自动刷新)
  14. 字节跳动正式offer之前是哪一个环节_不是做梦!她在3天前拿到腾讯、百度、字节跳动的offer!...
  15. Linux系统怎么吸引用户,Linux下如何增加一个系统用户
  16. 细嚼浏览器兼容----条件注释判断浏览器版本
  17. WAP开发环境的设置[IIS, APACHE, HTTPD]
  18. 图片php木马制作教程,图片木马制作大法
  19. win10浏览器加载很慢_Win10 IE浏览器的网页加载速度很慢总是卡死怎么办
  20. 删除设备和驱动器中的图标

热门文章

  1. ESXi OEM版本下载地址
  2. Android Tombstone/Crash的log分析和定位(墓碑文件)
  3. Android之录制歌曲
  4. 教你制作高逼格的技术分享Keynote(PPT)
  5. Scratch软件安装的详细步骤
  6. 医疗人工智能与未来医院信息化建设
  7. 详解冯诺依曼体系结构与操作系统
  8. array函数python_python中如何使用numpy.array函数创建数组?
  9. CTF misc图片类总结(入门级)
  10. html5网页制作心得体会,学习网页制作心得体会范文3篇