【计算机科学自用笔记】程序和指令

程序和指令

b站计算机科学课

上一期笔记

上个笔记我们已经基本做出了一个简单的CPU,这次我们给CPU一些指令来运行。

请添加图片描述

我们可以把0010 1110替换成“LOAD_A 14”指令,这样更好理解,我们对内存里剩下的数也这样转换。

请添加图片描述

“LOAD_A 14”是从地址14中拿到数字3,放入寄存器A

“LOAD_A 15”是从地址15中拿到数字14,放入寄存器B

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

“STORE_A 13”把寄存器A的值存入内存地址13。

我们加一些指令

请添加图片描述

  1. SUB是减法,和add一样需要2个寄存器来操作

请添加图片描述

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

请添加图片描述

  1. JUMP_NEGATIVE,它只在ALU的“负数标志”为真时,进行JUMP

请添加图片描述

之前的笔记中讲过,算数结果为负,“负数标志”才是真。结果不是负数时,“负数标志”为假。

请添加图片描述

  1. HALT指令让计算机的指令停止运行。

所以之前的例子程序,应该有HALT,

请添加图片描述

否则跑完STORE_A 13之后,CPU会不停运行下去,处理后面的0,因为0不是操作码,所以电脑会崩掉。

指令和数据都是存在同一内存里的,它们都是二进制数,没有区别,所以HALT很重要,能区分指令和数据。

请添加图片描述

运行这个程序,程序将不会结束,因为到达不了HALT,原因是ADDRESS 4 的位置上有JUMP 2。

为了停下来,我们需要有条件的JUMP,只有特定条件满足了,才执行JUMP,比如JUMP NEGATIVE就是条件跳转的一个例子。还有其他类型的条件跳转,比如JUMP IF EQUAL(如果相等),JUMP IF GREATER(如果更大)

请添加图片描述

这个就可以,当循环运行到B-A的值也就是ALU的计算结果为负时,JUMP_NEG 5指令会将指令跳转到ADDRESS 5,之后会遇到HALT。上面这个程序,有7个指令,但CPU执行了13个指令,因为在内部循环了2次。这个代码其实是算余数的,11除5余1。如果加多几行指令,我们还可以跟踪循环了多少次,11除以5,循环2次,余1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔倾晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值