前言

我们在刚开始学习汇编或者操作系统时,会被一些寄存器搞得晕头转向,可能是我比较笨吧,抽象能力比较差,对于CS和IP寄存器的概念是知道,但是不知道他们的作用。

CS和IP寄存器概念

书本上的解释如下:

  • CS是代码段寄存器,IP为指令指针寄存器,他们一起合作指向了CPU当前要读取的指令地址,可以理解为CS和IP结合,组成了PC寄存器。
  • 任何时刻,8086CPU都会将CS:IP指向的指令作为下一条需要取出的执行指令。
  • 8086CPU中的计算公式为 (CS << 4)|IP, 即CS左移4位,然后再加上IP

为什么要设计CS和IP寄存器

上面提到了CS和IP寄存器概念,初学者可能会有疑问,为什么要这么折腾?为什么不直接设计一个寄存器取代CS和IP寄存器?这就涉及到CPU的发展历史了,这里我们先说一句特别的感悟:CPU的发展是连续迭代的过程,新的设计要兼容旧的设计。之前一直不明白这句话的含义,或者是忽略了这句话,我们知道CPU是一种神奇的发明,可以说,CPU是现代所有科技的大脑和帮手,每一代的CPU都会有数以千万级的硬件产品使用,除非是上帝,任何人也不能说一下子就能设计永远不过时的架构,所以CPU是一个逐步迭代的产品,迭代的原因就是旧的架构或资源过时了,需要新的架构或者优化,但是我们在设计新的CPU架构时,必须也不得不考虑兼容性,兼容上一代的产品,这虽然给设计人员增加了设计难度,但是也是不得已为之,好了,上面说了很多正确的废话,接下来简单的说下为什么需要CS和IP寄存器,我们先说一下历史,不严谨的说:

  • 在上古CPU中,类似于现在的小型单片机,是没有CS和IP寄存器的,因为内存少的可怜,比如16位的CPU,最大就能访问2^16 byte,即64Kb的内存,也就是地址线、数据线、寄存器都是16位,访问内容完全都是统一的,一点都不会乱,而且那会儿64Kb的内存空间已经足够用了。
  • 随着应用程序的发展,对内存的需求也更多了(2021年,4G内存都沦落到乞丐配置了),所以相比上一代的64Kb,8086处理器的设计目标是1M的大内存空间,相当于提升到上一代的16倍,1M的空间对应的地址总线就是20位。

如上所属,愿望是很好的,一个很现实的问题就摆在Intel设计人员面前,地址线宽度是20位,但是CPU中的算数逻辑运算单元(ALU) 仍然是16位,而且很尴尬的是,当时的制造技术很难把ALU加工到20位,即便是有能力加工到20位,也无法兼容上一代的CPU了,当然也有其他的方案,比如增设一些20位的指令和寄存器,专门用于地址的运算和操作,但是那样又造成CPU内存结构的不均匀,基于上面的原因,Intel的工程师设计了一种在当时看来很巧妙的方法,即分段方法。也就是前面提到的CS:IP结合的算法,CS和IP都是16位,CS左移4位,然后与IP相加,得到20位的地址。这样就实现了从16位内存地址到20位实际地址的转换,段式内存管理带来了显而易见的优势,程序地址不再需要编码了,调试错误也更容易定位了,也能支持更大的内存了。

CPU通过CS和IP进行指令执行过程















CS和IP寄存器的作用及执行分析相关推荐

  1. 汇编程序设计-18-修改CS和IP寄存器的汇编指令

    可以通过转移指令来修改CS和IP寄存器的汇编指令 jmp 转移指令,是jump的缩写,也可以叫作跳转指令,使用方法如下: jmp 段地址:偏移地址 jmp 2AE3:0003 CS = 2AE3H I ...

  2. 汇编语言学习笔记一:CS和IP寄存器

    1.CS是代码段寄存器,IP是指令指针寄存器(相当于偏移地址).修改CS.IP的指令不同于修改通用的寄存器值的指令,修改通用寄存器的值可以用mov 指令(mav ax,123),mov指令被称为传送指 ...

  3. 【转】汇编语言学习笔记一:CS和IP寄存器

    https://blog.csdn.net/weixin_37924880/article/details/78644659

  4. 修改CS、IP寄存器的指令

  5. 通过CS和IP如何计算物理内存地址(OS)

    我是罡罡同学,一位初入网安的小白.☜(ˆ▽ˆ) (疯狂暗示 点赞 !关注!转发 !!! 点赞 !关注!转发 !!!) * 您的支持是罡罡同学前进的最大动力!(欢迎报考山东政法学院网络空间安全学院!!! ...

  6. CS 寄存器 和 IP 寄存器

    CS 寄存器 和 IP 寄存器 下面将要介绍的是一组非常非常重要的寄存器,即 CS:IP . CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中  CS 为代码段寄存器,而   IP ...

  7. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  8. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  9. 汇编学习笔记——2.10 CS和IP

    CS和IP的作用 CS和IP是8086CUP中两个最关键的寄存器.它们用来指示CPU当前要读取的地址.CS(code segment)为代码段寄存器,IP是指令指针寄存器. 在8086CPU中,任意时 ...

最新文章

  1. centos7重启命令_centos7单用户模式更改root一种方法
  2. 怎么在html中加判断,css样式里面如何做判断
  3. 计算机蠕虫的存在形式,计算机蠕虫
  4. Python——[Anaconda+Jupyter Notebook+Python3.6]环境下安装face_recognition
  5. python课本第二章答案_《Python自然语言处理》答案第一、二章
  6. 塔塔建网站服务器,塔塔帝国忘记哪个区怎么办
  7. java dictionary遍历_遍历 Dictionary,你会几种方式?
  8. 大厂面试算法系列-如何实现链表的逆序(一)-原地逆序
  9. python可以开多少线程_python爬虫可以开多少线程?
  10. win C/C++程序通过Get方式获取网页源代码
  11. java解析json的一种方法
  12. 新公司入职56天后的面谈小结
  13. 关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复...
  14. 报表比对常用excel方法
  15. 虚拟网卡服务器端软件,不再挤房间!自己动手架设自己的“浩方”对战平台
  16. flask蓝图buleprint使用
  17. PHP与ECMP,2019 NECMP东北音乐产业发展论坛在沈举行
  18. APP下载量全面概述,含统计方法
  19. 关于激励(如何发挥员工积极性)
  20. (爬取猫眼电影TOP100的电影信息(含图片、评分等))

热门文章

  1. 基于TI AM5728 + Artix-7 FPGA开发板(DSP+ARM) 5G通信测试手册
  2. 惠普暗影精灵II代pro进入biso
  3. DaoCloud Enterprise 5.0社区版永久免费!支持免费下载使用、学习和测试,体验企业级云原生底座的性能
  4. 【python】删除excel表格重复行,数据预处理
  5. 海贼王---追了好久的动漫了闲来无事发几张图嘿嘿
  6. 计算机专业毕业论文格式,2016年计算机专业毕业论文内容及格式要求
  7. html 限制每行字数,毕业论文每行字数的设置
  8. 荣耀x10和荣耀20pro哪个好?参数配置对比介绍
  9. 雅虎将收购什么类型公司?梅耶尔:移动!移动!移动!
  10. pandas学习之concat合并及读写CSV文件