CPU从硬件上是一个超大规模的集成电路,在我们软工设计师眼里CPU是一个执行各种计算机指令的逻辑机器,而计算机指令好比CPU能看懂的机器语言。
一个计算机的程序包括了很多的代码,这些东西如果一直待在CPU中只会影响CPU的运行速度,因此一般计算机指令(即一串串代码)平时存储在存储器中,需要计算时会调用到CPU中进行各种计算等等操作,这种计算机也叫存储程序型计算机(冯诺依曼体系结构)
早期计算机的纸带编程便是一种存储程序计算机的模型(程序存储在纸片上,程序由程序员用人脑译成对应的卡片)
我们平时用的C语言,Python等等高级语言,这样的代码进入电脑后会被程序翻译为汇编代码(从高级语言直接翻译到机器码,程序员也看不懂那些0.1代码,因此需要一个类似助记符一样的东西例如sum表示相加和来帮程序员理解)
汇编代码又有汇编器翻译为机器码(一大串的1.0代码,这才是CPU真正懂的代码,也称为计算机指令)
接下来理一下常见的指令有哪些:
1.算术类指令,常见的加减乘除等等,利用CPU的半加器,全加器
ps:全加半加还未完全懂,抽空去看一下
2.数据传输类指令,变量赋值,内存读写数据
3.逻辑类指令
4.条件分支类指令
5.无条件跳转指令
CPU是如何执行指令的
是一直顺序?还是各种跳转,这其中的原理是什么?
首先了解CPU内部
CPU由一堆寄存器组成(寄存器由触发器或者锁存器组成)【还没看到后续在数学电路课程学习中补充这内容】
N个触发器或者锁存器可以组成N位的寄存器,保存N位数据
然后是三种特殊的寄存器
1.PC寄存器,也叫指令地址寄存器(放下一条需要执行的指令的地址)
2.指令寄存器(放正在执行的指令)
3.条件码寄存器(存放CPU算术或逻辑运算的结果)
首先程序的指令的地址在内存中的保存是连续的,
在CPU中有个记录指令长度并根据长度执行指令的指令地址寄存器,执行完一条指令后,记录的长度会自加。
但是有些特殊的指令,如跳转指令,会修改指令地址寄存器内部的地址值,从而改变CPU的执行顺序。
在机器指令本质上goto指令与if-else与while与for在CPU内部是一样操作的,都是改变地址值来跳转特定指定位置
PS:写代码尽量不要用goto。