指令、程序、中央处理器
指令
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、至此,该程序运行完毕
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战