基础知识
RAM:RAM是随机存取存储器(random access memory),是计算机内部存储器中的一种,也是其中最重要的,计算机和手机中一般把其叫做(运行)内存,它的速度要比硬盘快得多,所以用运行程序在RAM中,而存放运行时不用的数据则在硬盘中,什么时候需要数据,便把数据从硬盘中拿到内存,但同时RAM断电会丢失数据,所以我们电脑如果断电了就会丢失原来正在运行的数据。所以,手机中的RAM和电脑中的RAM的概念是相同的,RAM即内存越大,能同时在内存中执行的程序就越多,性能一般是越好的。
寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。包括通用寄存器、专用寄存器和控制寄存器。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。
计算机CPU执行程序分为三个阶段:取指阶段(FETCH PHASE)、 解码阶段(DECODE PHASE)、 执行阶段(EXECUTE PHASE),内部通过时钟信号控制,依次执行操作系统传给CPU的程序指令。
CPU执行一个ADD的流程示例
指令表
RAM数据初值
ADDRESS | DATA |
0 | 00101110 |
1 | 00011111 |
2 | 10000100 |
3 | 01001101 |
4 | 00000000 |
5 | 00000000 |
6 | 00000000 |
7 | 00000000 |
8 | 00000000 |
9 | 00000000 |
10 | 00000000 |
11 | 00000000 |
12 | 00000000 |
13 | 00000000 |
14 | 00000011 |
15 | 00001110 |
... |
寄存器初值
寄存器 A: 0000 0000
寄存器 B: 0000 0000
寄存器 C: 0000 0000
寄存器 D: 0000 0000
指令寄存器: 0000 0000
指令地址寄存器: 0000 0000
下面开始演示两个数的和3+14的结果是如何被程序一步步执行的。
取指阶段
指令地址寄存器的值是0000 0000,表示去RAM的地址0000 0000位置将对应数据复制到指令寄存器中,指令寄存器的值变为:0010 1110
解码阶段
根据指令寄存器的值,查找指令表对应的指令信息。得到该指令的信息
0010:LOAD_A
1110:00000011
执行阶段
通过解码阶段,知道了这条指令对应的是给A寄存器取值,对应RAM的1110地址的值是 0000 0011。更新寄存器 A: 0000 0011
当一条指令完成后,就自动更新指令地址寄存器的地址+1,所以指令地址寄存器的值是0000 0001, CPU靠时钟控制继续从指令地址寄存器。
取指:更新指令寄存器值:00011111
解码: 0001:LOAD_B, RAM 1111: 00001110
执行:更新寄存器B的值:00001110
更新指令地址寄存器的值:00000010
------------
取指:更新指令寄存器值:10000100
解码: 1000:ADD, REGISTER 01: 寄存器B, REGISTER 00: 寄存器A
执行:ALU指令ADD指令,即寄存器01值(B) + 寄存器00值(A) =3+14=17, 17写回到 寄存器00(A)中。
更新指令地址寄存器的值:00000011
------------
取指:更新指令寄存器值:01001101
解码: 0100:STORE_A, RAM 1101
执行:将寄存器A的值写回到RAM 1101地址,更新RAM 1101: 00010001
更新指令地址寄存器的值:00000100,
...
以上就是CPU执行两个数的相加程序的流程示意。实际中还包括数据传输控制等线路的连接等。总之CPU就是不断完成FETCH,DECODE,EXECUTE来完成我们给它的各种命令。为了提升效率,现在计算机利用了指令流水线等设计,主要就是让CPU的不同部件由串行变成并行执行。或者增加计算机的执行核心个数。