指令、程序、中央处理器

指令

1、给 CPU 支持的所有指令,分配一个 ID

2、操作码:指明该指令要完成的操作的类型或性质,如取数、做加法或输出数据等

3、地址码:指明操作对象的内容或所在的存储单元地址,可以是寄存器或内存地址

4、指令集组成程序

5、CPU 两种策略以支持更多指令

(1)最直接的方法是用更多位来代表指令,比如 32 位或 64 位,这叫指令长度

(2)可变指令长度:比如某个 CPU 用 8 位长度的操作码,如果看到 HALT 指令,HALT 不需要额外数据,那么会马上执行,这样设计,指令可以是任意长度,但会让读取阶段复杂一点点

6、假设以下程序的指令

 

CPU

1、负责执行程序

2、程序由一个个操作组成,即指令

(1)如果是数学指令,CPU 会让 ALU 进行数学运算

(2)可能是内存指令,CPU 会和内存通信,然后读 / 写值

3、组成

(1)假设 RAM只有 16 个位置,每个位置存 8 位

(2)四个 8 位寄存器,叫 A,B,C,D,用来临时存数据、操作数据

(3)还需要两个寄存器,来完成 CPU,指令地址寄存器:追踪程序运行到哪;指令寄存器:储存当前指令

(4)时钟:负责管理 CPU 的节奏,以精确的间隔 触发电信号,控制单元会用这个信号,推进 CPU 的内部操作,确保一切按步骤进行

(5)时钟速度:CPU:取指令 -> 解码 -> 执行的速度,单位是赫兹,赫兹是用来表示频率的单位,1 赫兹代表1 秒 1 个周期

4、第一阶段:取指令阶段

(1)首先,将指令地址寄存器连到 RAM

(2)寄存器的值为 0,因此 RAM 返回地址 0 的值,00101110 复制到指令寄存器

5、第二阶段:解码阶段

(1)前 4 位 0010 是 LOAD_A 指令,即把 RAM 的值放入寄存器 A

(2)后 4 位 1110 是 RAM 的地址,转成十进制是 14

(3)指令由控制单元进行解码,控制单元也是逻辑门组成的

(4)比如,为了识别 LOAD_A 指令,需要一个电路,检查操作码是不是 0010

6、第三阶段:执行阶段

(1)用检查是否 LOAD_A 指令的电路,打开 RAM 的允许读取线,把地址 14 传过去

(2)RAM 拿到值,00000011,十进制的 3

(3)LOAD_A 指令,把这个值只放到寄存器 A,其他寄存器不受影响

(4)需要一根线,把 RAM 连到 4 个寄存器

(5)用检查是否 LOAD_A 指令的电路,启用寄存器 A 的允许写入线

(6)把 RAM 地址 14 的值,放到了寄存器 A

(7)指令完成了,可以关掉所有线路,去拿下一条指令

(8)把指令地址寄存器 + 1,执行阶段结束

控制单元看作一个整体,继续执行程序

1、取指令阶段,指令地址寄存器现在的值是 1,所以 RAM 返回地址 1 里的值:00011111

2、解码阶段:0001 是 LOAD_B 指令,从 RAM 里把一个值复制到寄存器 B,内存地址是 1111,十进制的 15

3、执行阶段,控制单元让 RAM 读地址 15,并配置寄存器 B 接收数据,把值 0000 1110,即十进制的 14 存到了寄存器 B

4、指令地址寄存器 + 1

5、取指令阶段,指令地址寄存器现在的值是 10,所以 RAM 返回地址 2 里的值:10000100

6、解码阶段:1000 是 ADD 指令,0100 不是 RAM 地址,而是 2 位 + 2 位分别代表 2 个寄存器

(1)2 位可以表示 4 个值,所以足够表示 4 个寄存器

(2)第一个地址是 01, 代表寄存器 B

(3)第二个地址是 00, 代表寄存器 A

(4)因此,10000100,代表把寄存器 B 的值,加到寄存器 A 里

7、执行阶段

(1)控制单元负责选择正确的寄存器作为输入,并配置 ALU 执行正确的操作

(2)对于 ADD 指令,控制单元会启用寄存器 B,作为 ALU 的第一个输入,启用寄存器 A,作为 ALU 的第二个输入

(3)ALU 可以执行不同操作,所以控制单元必须传递 ADD 操作码告诉它要做什么

(4)最后,结果应该存到寄存器 A,但不能直接写入寄存器 A,这样新值会进入 ALU ,不断和自己相加

(5)因此,控制单元用一个自己的寄存器暂时保存结果,关闭 ALU,然后把值写入正确的寄存器,这里 3+14=17,二进制是 00010001,现在存到了寄存器 A

8、指令地址 + 1

9、取指令阶段,指令地址寄存器现在的值是 11,所以 RAM 返回地址 3 里的值:01001101

10、解码阶段:0100 是 STORE_A 指令,RAM 地址 1101,十进制 13

11、执行阶段地址传给 RAM,打开允许写入,同时,打开寄存器 A 的允许读取,这样就可以把寄存器 A 里的值,传给 RAM

12、至此,该程序运行完毕

posted @ 2022-04-06 23:24  半条咸鱼  阅读(188)  评论(0编辑  收藏  举报