指令和程序

jump指令

首先指令地址寄存器从0开始,LOAD A14,把1存入寄存器A(因为地址14里的值是1)
在这里插入图片描述
然后指令地址寄存器跳到1,把1存入寄存器B在这里插入图片描述
在这里插入图片描述
现在寄存器A的值是2(当然是二进制存的)
在这里插入图片描述
现在遇到jump2,cpu会把指令地址寄存器的值,现在是4改成2
在这里插入图片描述
因此下一步不是HALT,而是读取地址2里的指令,也就是ADD B A
在这里插入图片描述
跳转后,寄存器A里是2寄存器B里是, 1+2=3,寄存器A变成3,存入内存 ,这样永远碰不到HALT,这叫无限循环,程序会永远跑下去。
为了停下来,我们需要有条件的JUMP,只有条件满足,才执行jump,比如jump negative就是条件跳转的一个例子,还有其他类型如 jump if equal(如果相等),jump if greater(如果更大)

jump negative

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6存入a在这里插入图片描述
因为6是正数,所以负数标志是假的,因此不会执行jump,继续执行至jump2
在这里插入图片描述
a变成1 ,下一次1-5=-4位负数,这次alu负数标志是真
在这里插入图片描述
在这里插入图片描述
跳出无限循环,现在指令ADD BA -4+5=1,存入寄存器A
在这里插入图片描述
最后碰到HALT 停了下来,虽然程序只有7个指令,但cpu执行了13个指令,因为内部两次循环,这些代码其实是算余数的11除5余1

ALU 除法

alu不具备除法功能,是程序给了我们这个功能。别的程序也可以用我们的除法程序,来做其他的事情。

32位 64位

如果用上图的方法来使用,由于操作指令由4位表示,则只能由16个操作指令,且内存地址也只有16个,这样都无法使用jump 17,因为4位二进制无法表示数字17。
因此现代由两种方法来处理这个为题
最直接方法用更多位来代表指令,比如32位 64位,这叫指令长度。
第二种方法“可变指令长度”,举个例子,比如某个cpu用8位长度的操作码,如果看到HALT指令,HALT不需要额外数据。会马上执行,如果看到JUMP,它得知道位置值,这叫“立即值”,这样设计指令可以是任意长度,但让读取阶段复杂了一点点

真实cpu

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如光ADD指令就有很多变种

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值