段寄存器百度百科原地址

cs是代码段寄存器

 存放当前正在运行的程序代码所在段的段基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移量则由IP提供。

ds是数据段寄存器

     当前程序使用的数据所存放段的最低地址,即存放数据段的段基址

ss是堆栈段寄存器

 当前堆栈的底部地址,即存放堆栈段的段基址

es是扩展段寄存器

 当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段

fs是标志段寄存器

 fs是80386起增加的两个辅助段寄存器之一,在这之前只有一个辅助段寄存器ESFS寄存器指向当前活动线程的TEB结构(线程结构)偏移  说明000  指向SEH链指针004  线程堆栈顶部008  线程堆栈底部00C  SubSystemTib010  FiberData014  ArbitraryUserPointer018  FS段寄存器在内存中的镜像地址020  进程PID024  线程ID02C  指向线程局部存储指针030  PEB结构地址(进程结构)034  上个错误号

gs是全局段寄存器

 gs是80386起增加的两个辅助段寄存器之一,在这之前只有一个辅助段寄存器ES

段寄存器的产生

  1. 段寄存器的产生源于Intel 8086
    CPU体系结构中数据总线与地址总线的宽度不一致。数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32位”指的就是这个。8086CPU的数据总线是16位。
  2. 地址总线的宽度不一定要与ALU的宽度相同。因为ALU的宽度是固定的,它受限于当时的工艺水平,当时只能制造出16位的ALU;但地址总线不一样,它可以设计得更宽。地址总线的宽度如果与ALU相同当然是不错的办法,这样CPU的结构比较均衡,寻址可以在单个指令周期内完成,效率最高;而且从软件的解决来看,一个变量地址的长度可以用整型或者长整型来表示会比较方便。但是,地址总线的宽度还要受制于需求,因为地址总线的宽度决定了系统可寻址的范围,即可以支持多少内存。如果地址总线太窄的话,可寻址范围会很小。如果地址总线设计为16位的话,可寻址空间是2^16=64KB,这在当时被认为是不够的;Intel最终决定要让8086的地址空间为1M,也就是20位地址总线。地址总线宽度大于数据总线会带来一些麻烦,ALU无法在单个指令周期里完成对地址数据的运算。有一些容易想到的可行的办法,比如定义一个新的寄存器专门用于存放地址的高4位,但这样增加了计算的复杂性,程序员要增加成倍的汇编代码来操作地址数据而且无法保持兼容性。
  3. Intel想到了一个折中的办法:把内存分段,并设计了4个段寄存器,CS,DS,ES和SS,分别用于指令、数据、其它和堆栈。把内存分为很多段,每一段有一个段基址,当然段基址也是一个20位的内存地址。不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位的地址后面再加上4个0就构成20位的段基址。而原来的16位地址只是段内的偏移量。这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址

寄存器由来 ES CS SS DS FS GS区别相关推荐

  1. cs ss ds es

    cs ss ds es 首先 cpu中寄存器用于存储内存中数据的物理地址 cs 为代码段寄存器,一般用于存放代码: 通常和IP 使用用于处理下一条执行的代码 cs:IP 基地址:偏移地址 cs地址对应 ...

  2. The use of FS/GS registers

    博注:偶很少弄Windows的东西,偶尔因为RE了ntoskrnl.exe->ntoskrnl.c,发现里面很多__readfsdword(32),__readfsdword(292)之类的调用 ...

  3. 汇编中ah,al,ax;es,cs,ds,ss;

    ax中ah是高字节,al是低字节,组成ax(字) CS 代码段寄存器: DS 数据段寄存器: ES 附加段寄存器.(使用时与数据段寄存器基本相同) SS 堆栈段寄存器: ds和es(Extra SEg ...

  4. Intel的X86芯片段式管理历史起源(CS、DS、ES、SS)——避免产品公司的小九九

    Intel公司在1974年4月发布8080 CPU.这是一枚8位元处理器,时脉为2MHz,亦是第一枚可算得上的处理器. 注意,这里的8位.16位指的是ALU的宽度,而并不是地址线的宽度(如果CPU与地 ...

  5. CS、DS、SS、ES

    在CPU中,CS的全拼为"Code Segment",翻译为"代码段寄存器",对应于内存中的存放代码的内存区域,用来存放内存代码段区域的入口地址(段基址). 在 ...

  6. 8086cpu中的寄存器(cs、ds、es、ss、ip、sp、bp、si、di)

    1)4个16位段地址寄存器 8086对存储器采用分段管理,4个段寄存器分别用于存放4个当前段的起始地址,又称为段基址寄存器. CS(Code Segment) --代码段寄存器 DS(Data Seg ...

  7. cs,ds,ss,es?即cs,ds,ss,es的区别

    cs 为代码段寄存器,一般用于存放代码: ds 为数据段寄存器,一般用于存放数据: ss 为栈段寄存器,一般作为栈使用: es 为扩展段寄存器: 其中的es在使用时可以看做是ds的扩展寄存器. 所以在 ...

  8. LDT,LDTR,GDT,GDTR,CS,DS,ES,TSS,TR操作系统常见寄存器

    本人平时操作系统常见的一些符号,容易忘记混淆,记录一下,欢迎补充~ LDT:local descriptor table,局部描述符表,主要存放各个任务的私有描述符,如本任务的代码段描述符和数据段描述 ...

  9. gs_fs0文件是什么_“ FS” /“ GS”寄存器的用途是什么?

    慕的地10843 它们的目的是什么,以及Windows和Linux的用途是什么.段寄存器的最初目的是允许程序访问许多不同的(大)内存段,这些段旨在独立并且是持久性虚拟存储的一部分.这个想法来自1966 ...

最新文章

  1. 华为云大数据存储的冗余方式是三副本_阿里云大数据产品 | 大数据计算
  2. 网站SEO优化值得收藏的技巧介绍
  3. 2018年全国及31省市数据中心相关政策汇总及解读「全」
  4. wcf简单的创建和运用
  5. 高翔orbslam_高翔博士分享ORBSLAM2_with_pointcloud_map的安装步骤
  6. vue init webpack vue-demo01复杂安装的详解
  7. Ironic 安装和配置详解
  8. termux配置python安装kali_安卓安装kali linux之Termux
  9. getlong_Java LocalDateTime类| 带示例的getLong()方法
  10. WEB安全入门:如何防止 CSRF 攻击?
  11. 如何在Python中注释掉一段代码[重复]
  12. excel筛选排序从小到大_excel筛选怎么用教程 重复数据多个条件筛选功能教学
  13. 大数据分析中的四大数据类型
  14. 关于此应用无法在你的电脑上运行的解决方案
  15. DNS大全(114DNS 、阿里DNS、百度DNS 、360 DNS、Google DNS)
  16. 虚拟机更新升级,原来的GuestAdditions versions版本不匹配
  17. uva 10827 - Maximum sum on a torus
  18. 计算机毕业设计Java酒店管理信息系统(源码+mysql数据库+系统+lw文档)
  19. 深度学习培训班当天小结1
  20. 7.7.3、下界通配符

热门文章

  1. (转)Oracle JDBC Memory Management中的客户端缓存
  2. Discuz!开发之判断蜘蛛(机器人)访问函数checkrobot()介绍
  3. 机器学习——python scikit-learn 贝叶斯
  4. 【吴恩达机器学习】第二周课程精简笔记——多元线性回归和计算参数分析
  5. 杂谈:使用SteamCMD搭建七日杀(7 days to die, 7DTD)Linux版本专用服务器
  6. 耳机接口规则_手机耳机接口统一标准发布
  7. CAD进阶练习(四)
  8. 省时省力!这些Python高效代码片段必须牢记
  9. 第一篇 javase时钟表
  10. Fishman的渔人码头 - Fishman - 新浪BLOG