09设计指令集(下_指令)_基于MIT 6.004计算机组成原理

ALU指令

指令分类

  • 计算:对寄存器值进行数学或逻辑计算
  • 加载或存储:访问主存中的值
  • 分支:改变PC值

所有指令等长(32位,占用主存里的一个单词)

  • 简化控制逻辑单元的解码过程,易于计算下一个PC值
  • 编码长度更长(固定长度编码)

每个操作有自己的符号名称,称为助记符(mnemonic),例如ADD

在这里插入图片描述

常数操作

将常数作为ALU指令的第二个操作数

在上述情况中,替换掉rb的五位,可以用最后的16位([15:0])表示一个常数

实践证明,对很多指令来说,以小常数作为第二个操作数是非常普遍的

在这里插入图片描述

需要注意的是,如果一个常量无法用16位正确表达,那么我们需要以32位的形式将它存储在主存中,像使用变量一样,使用时将其加载到寄存器中。

内存访问

由于Beta是加载-存储架构,所以加载和存储是访问内存值的唯一方法

在这里插入图片描述

示例

在这里插入图片描述

寄存器R31与0绑定

Reg[r0]<-Mem[Reg[r31]+sext(0x1008)]=Mem[0+sext(0x1008)]=x
Mem[Reg[r31]+sext(0x100C)]=Mem[0+sext(0x100C)]=y<-Reg[r0]

分支

分支表示执行序列中的潜在分叉。

在这里插入图片描述

在这里插入图片描述

offset

这里的分支使用的是PC相对地址,也就是说分支目标的地址是相对于分支的下一个指令的地址而言的。offset=0表示分支的下一个指令,offset=-1表示分支本身。

  • 向后分支(backward branch):offset为负值,经常在循环结束的分支处使用,用于回到循环的开头
  • 向前分支(forward branch):offset为正值,在if条件判断中需要向前跳过一些步骤时使用

跳转指令

分支指令可以将控制传递给由常数计算得的目标位置,JMP指令则可以将控制传递给预先计算好的地址。

在这里插入图片描述

将程序计数器设置为寄存器 "ra "的值。像分支一样,JMP将把PC+4的值写入指定的目标寄存器中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值