前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单的cpu指令

简单的cpu指令

作者头像
硬核编程
发布2019-08-19 21:36:21
5840
发布2019-08-19 21:36:21
举报

CPU 之所以强大,是因为它是可编程的 -如果写入不同指令,就会执行不同任务,CPU 是一块硬件,可以被软件控制!

LOAD指令

我们重新看一下上周的简单程序,内存里有这些值,每个地址可以存 8 位数据。因为我们的 CPU 是假设的,这里前4位是"操作码",后4位指定一个内存地址或寄存。内存地址 0 是 0010 1110,前4位代表 LOAD_A 指令,意思是:把后 4 位指定的内存地址的值,放入寄存器 A,后 4 位是 1110,十进制的 14。

我们来把 0010 1110 看成 "LOAD_A 14" 指令,这样更好理解!也更方便说清楚,可以对内存里剩下的数也这样转换。这里,我们的程序只有4个指令,还有数字 3 和 14。

现在一步步看,"LOAD_A 14" 是从地址 14 中拿到数字3,放入寄存器A。"LOAD_B 15" 是从地址 15 中拿到数字14,放入寄存器B。

ADD指令

"ADD B A" 告诉 ALU 把寄存器 B 和寄存器 A 里的数字加起来,(B和A的)顺序很重要,因为结果会存在第二个寄存器,也就是寄存器 A。

最后一条指令是 "STORE_A 13",把寄存器 A 的值存入内存地址 13,我们把 2 个数加在了一起了。

毕竟只有4个指令,也只能做这个了。加多一些指令吧。SUB 是减法,和 ADD 一样也要 2 个寄存器来操作。

JUMP指令

还有 JUMP(跳转),让程序跳转到新位置。如果想改变指令顺序,或跳过一些指令,这个很实用。举例, JUMP 0 可以跳回开头,JUMP 在底层的实现方式是, 把指令后 4 位代表的内存地址的值,覆盖掉 "指令地址寄存器" 里的值。

JUMP_NEGATIVE

还有一个特别版的 JUMP 叫 JUMP_NEGATIVE,它只在 ALU 的 "负数标志" 为真时,进行 JUMP。前面讲过,算数结果为负,"负数标志"才是真,结果不是负数时,"负数标志"为假,如果是假,JUMP_NEGATIVE 就不会执行, 程序照常进行。我们之前的例子程序,其实应该是这样,才能正确工作 。否则跑完 STORE_A 13 之后,CPU 会不停运行下去,处理后面的 0,因为 0 不是操作码,所以电脑会崩掉!

我还想指出一点,指令和数据都是存在同一个内存里的。它们在根本层面上毫无区别,都是二进制数。HALT 很重要,能区分指令和数据。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员成长充电站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档