第九课_CPU是如何计算2+3的

前言

这节课的内容可能比较难理解,能看懂的就看,看不懂的可以忽略之所以写这个,是想引出寄存器、数据宽度的概念。还有就是理解一下底层硬件的运行逻辑。

通过前一课的学习,应该比较了解与、或、非、异或等的逻辑运算了。那CPU的如何利用这些逻辑运算进行加法运算的呢,看下面的讲解。(可能有讲得不太准确的地方,欢迎指出)。

CPU要计算2 + 3,首先就要把23传给CPUCPU也需要容器保存这两个数据,这里所说的容器就是CPU的寄存器(记住这寄存器,后面讲汇编的时候详细讲),如果不好理解寄存器,那就把寄存器理解成一个装水的杯子。

第一步:CPU把23分别放到X杯子(寄存器)、Y杯子(寄存器)里。然后进行异或运算,得到的结果放到另一个R杯子(寄存器)。

第九课_CPU是如何计算2+3的_第1张图片

第二步:判断运算是否结束。流程是这样的,先把X杯子、Y杯子中的数进行逻辑与运算,得到的结果再进行左移一位。

如果左移的结果是0,则说明计算结束,杯子R(寄存器)中的数据就是运算的结果。

如果左移的结果不是0,说明计算没有结束。那么就把杯子R中的数据复制到杯子X中,把左移的结果放到Y杯子中,然后继续重复步骤一的方法继续计算。 

第九课_CPU是如何计算2+3的_第2张图片

第三步:因为第二步中判断到运算没有结束,再进行异或运算,把运算的结果保存到杯子R中。

第九课_CPU是如何计算2+3的_第3张图片

第四步:判断运算是否结束:先进行逻辑与运算,然后把运算的结束进行左移,左移的结束刚好是0,说明运算结束,则杯子R中的数据0101(即十进制的5)就是2+3的运算结果。

第九课_CPU是如何计算2+3的_第4张图片

什么是左移运算?二进制数,每一位数都向左移动,左边移出的位就舍去,左移后右边如果有空位,则补0。

第九课_CPU是如何计算2+3的_第5张图片

有人会问为什么这样计算的?这可不好答,因为这些都是前辈们弄出来的,本id只是用自己的话描述一下而已。不过这种算法真的很巧妙,必须佩服那些为计算机事业作出巨大贡献的老前辈们。

好了,如果能理解上的算法。大家可以测试一下其他数据的加法。

最后如果大家想实现2-3,CPU又是如何运算的呢,减法也是使用上面的算法,不过这涉及到数据宽度的问题。数据宽度下节课再讲,这可能牵扯到大学的反码、补码,可能会颠覆一些大学里的看法。敬请期待。

写于2020.3.8 22:31

 

你可能感兴趣的:(零基础学习C/C++)