CS和IP寄存器的作用及执行分析

前言

我们在刚开始学习汇编或者操作系统时,会被一些寄存器搞得晕头转向,可能是我比较笨吧,抽象能力比较差,对于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张图片
CS和IP寄存器的作用及执行分析_第2张图片
CS和IP寄存器的作用及执行分析_第3张图片
CS和IP寄存器的作用及执行分析_第4张图片
CS和IP寄存器的作用及执行分析_第5张图片
CS和IP寄存器的作用及执行分析_第6张图片
CS和IP寄存器的作用及执行分析_第7张图片
CS和IP寄存器的作用及执行分析_第8张图片
CS和IP寄存器的作用及执行分析_第9张图片
CS和IP寄存器的作用及执行分析_第10张图片

CS和IP寄存器的作用及执行分析_第11张图片
CS和IP寄存器的作用及执行分析_第12张图片
CS和IP寄存器的作用及执行分析_第13张图片
CS和IP寄存器的作用及执行分析_第14张图片
CS和IP寄存器的作用及执行分析_第15张图片
CS和IP寄存器的作用及执行分析_第16张图片

你可能感兴趣的:(操作系统)