目录
程序(program) = 指令(instruction) + 数据(data)
算术逻辑单元 ALU(Arithmetic & Logic Unit)
冯诺依曼体系
指令只是一种特殊的一些数据,现代的计算机, 大多遵守
冯诺依曼体系结构

运算器+控制器+存储器+输入设备+输出设备
现在可以认为是:处理器+存储器+输入设备+输出设备
硬件体系下可以认为是:CPU+内存+I/O,内部的数据交换通过总线(BUS)
CPU 中央处理器: 进行算术运算和逻辑判断.
存储器: 分为外存和内存(Memory), 用于存储数据(使用二进制方式存储) ,storagr(二级存储)
输入设备: 用户给计算机发号施令的设备.外部数据(物理数据)进入到存储器
输出设备: 计算机个用户汇报结果的设备.存储器内的数据出来到外部世界
针对存储空间
硬盘 > 内存 >> CPU
针对数据访问速度
CPU >> 内存 > 硬盘
程序(program) = 指令(instruction) + 数据(data)
前提:内存是电子元件组装而成,以二进制的形式存数
指令
指令表现为一种特殊的数据,需要存储在内存中
指令是一组预规定的动作,利用编码表规定 -- opcode
数据(广义数据)
同样需要存储在内存中
数据在内存中的存储问题
数据分为:数|非数的数据,数就指的是数字,而非数的数据就指的比如字符串,声音,图片等
要在计算机中进行“非数数据”的存储,把非数数据转换成数类型的数据 -- 编码表
例如:
字符串->字符 Unicode编码(ASCII编码是其字节)
图片 RGB编码
声音 波形
数类型的数据在内存中的表示方法
有限范围内的整数表示:正码,反码,补码 -> 整型数
有限范围的小树表示:IE标准 -> 浮点数
接下来局限在整型中,但表示的数据可能是整数,指令,字符,图片,声音等….
CPU的基本工作原理
CPU:逻辑算术运算器,控制器,寄存器register(临时存储数据的存储单元,每一个都不大,但不止一个)
现代的高级CPU为了提升性能,一般都带有缓存(CPU内缓存)Level1,Level2,Level3缓存
演示一个8位加法器的过程
逻辑门:二级的电子开关

组建与门,或门,非门
非门
与门
或门
异或门
算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑。接下来,我们用上一节构建的 逻辑门来完成自己的一个 ALU,去学习理解它的工作模式,以便作为我们进一步理解现代计算机工作原理的基石。
算术单元(Arithmetic Unit)
算数单元,负责计算机里的所有数字操作,比如四则运算,当然它能做的远远不止这些。接下来我们会 带着大家实现一个 8 位(bits)的加法器(adder)来,以演示整个过程,其他的运算器就不再详细讲解 了。
半加器
全加器
八位数的加法器 = 七个全加器 + 一个半加器
逻辑单元(Logic Unit)
逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比
ALU符号
三个输入:
A:要参与计算的第一个数
B:要参与计算的第二个数
C:本次的运算是什么 — opcode
输出:正常输出
CPU是计算机的核心,ALU就是CPU的核心。
所有程序的执行,本质上都是计算 + 读取 + 存入
控制单元 CU(Control Unit)
我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU进行何种的运算,而这个部件就是控制单元(CU)。
指令(Instruction)
首先,我们先介绍下我们需要到的指令(instruction)。
所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本身也是一个数字,用二进制形式保存在内存的某个区域中。
CPU 的基本工作流程
这里人为规定PC地址起始位置位0
0为我们要执行的第一个指令
1,取码阶段
CU根据PC的值,去内存的相应位置,读取指令到IR,PC正常情况自动+1
2,解码阶段
CU按照预先设定的指令集解读,指令数据(opcode + 操作数)
例如:
0010 1110
人为规定:0010是opcode
查看指令表可以看出,这个数据的指令是,从地址为14的内存中加载数据,放到A寄存器中
3,执行阶段(CU)
LOAD指令应该由CU执行,所以按照规定执行指令:从内存14地址处,将数据读到A寄存器中
注意
:1.由于硬件中PC在自动 + 1,所以我们的代码变成的指令才能顺序的往下去执行。
2.代码中的一条语句,很可能是需要多条指令才能完成。
语句是一组指令的封装抽象
变量是一段内存空间的封装抽象
3.PC寄存器中的值在这个指令周期中很关键,可以控制执行哪里的指令
CPU的运算快慢,就是看CPU执行指令周期的频率
CPU主频可以粗略地看作:每秒钟CPU能执行多少个指令周期。
分支语句是怎么来的
if,else,while,for,break,continue.....
CPU中往往会提供一些指令,这些指令可以去修改PC的值。

通过CPU中 预先规定的指令,可以修改PC中的值(带条件修改),进而影响执行流(excution flow)
只要有个起始位置填充到PC里,执行流就可以正常的运行起来了,我们平时的main方法就是
程序启动:有“人”把我们程序翻译出来的指令第一条的地址放到PC中,我们的程序就正常跑起来了
CPU的正常工作流程
取码 -> 编码 -> 执行周期
只要电脑在开机状态下,CPU就在不停的循环着这个周期,在硬件CPU的视角中,只有指令的概念,没有指令属于谁的概念!
CPU的中断模式(Interrupt Mode)
正常模式下,CPU可以顺序执行,可以分支执行。但总归只能按照既定顺序去执行。
但现实中,很多时候,需要暂时中断CPU的当前执行流,先让CPU去做其他工作,再回过头继续原来的执行流。
CPU硬件中提供了一种机制(中断)让CPU停下来
1.保存当前的PC的值到内存的某个位置
2.修改PC的值,让执行其他执行流
3.其他执行流结束之后,通过将刚才保存的PC值恢复到PC寄存器
4.继续原来的执行流
中断的用途
1.IO设备的处理
当有外部数据到达Input设备时,触发某个中断,让当前正在执行的执行流暂停,切换到Input驱动对应的执行流,把Input设备中读取到的数据,放到内存的某个位置,恢复之前的执行流、
2.操作系统中用来做进程调度(线程调度)
总结
1.程序 = 指令 + 数据 其中指令也可以看作是一种特殊的数据
2.任何的数据,基本都是以整型,浮点型进行表示,以保存到内存中,其中,“非数数据”都会按照一定标准格式编码成整型
3.CPU = ALU + CU
其中ALU负责进行 逻辑 + 算术运算,需要利用寄存器完成中间数据的临时保存,
CU主要负责控制 内存(memory) <-> 寄存器(register) 数据传递的指令以及驱动ALU工作
4.PC寄存器很重要,可以影响当前CPU的执行流,默认情况下是正常顺序走的(自动+1)
CPU中提供了指令,可以修改PC的值(可以带条件),进行产生分支逻辑
5.CPU的正常工作周期:取码 - > 解码 -> 执行
6.CPU提供了中断模式,可以暂停当前的执行流,先去执行别的执行流,并根据需要,恢复回原来的执行流
7.CPU视角中只有要执行的下一条指令是什么,根本不知道指令是属于哪个程序,更不要说属于哪个类,方法了
8.代码中的一条语句,很可能要对应多条指令才能完成。