自己动手写CPU(5) 移动操作指令的实现

指令说明

MIPS32指令集架构中定义的移动操作指令共有6条: movn、movz、mfhi、mthi、mflo、mtlo,后4条指令涉及对特殊寄存器HI、LO的读/写操作。HI、LO寄存器用于保存乘法、除法结果。当用于保存乘法结果时,HI寄存器保存结果的高32位,LO寄存器保存结果的低32位; 当用于保存除法结果时,H寄存器保存余数,LO寄存器保存商。

指令格式

                        1.jpg

movn指令

用法:movn rd, rs,rt

作用: if rt ≠0 then rd <- rs

判断地址为rt的通用寄存器的值。如果不为零,那么将地址为rs 的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变

movz指令

用法:movz rd, rs, rt

作用:  if rt = 0 then rd <- rs

与上面movn指令的作用正好相反,判断地址为rt的通用寄存器的值。如果为零,那么将地址为rs 的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变

mfhi 指令

用法:mfhi rd

作用:  rd <- hi

将特殊寄存器Hi的值赋给地址为rd的通用寄存器

mflo指令

用法:mflo rd

作用:rd <- lo

将特殊寄存器LO的值赋给地址为rd的通用寄存器

mthi 指令

用法:mthi rs

作用: hi<- rs

将地址为rs的通用寄存器的值赋给特殊寄存器HI

mtlo指令

用法:mtlo rs

作用:lo <- rs

将地址为rs的通用寄存器的值赋给特殊寄存器LO

代码的修改

  • 增加HILO模块,用于实现HI、LO寄存器
  • 执行阶段的EX模块增加判断是否要写入HILO模块
  • 执行阶段的EX模块增加了与HILO有关的输入接口,解决数据相关问题

         

 HI LO模块

读取HI、LO寄存器时仍会存在数据相关问题,解决方式仍是使用数据前推(上篇讲解过),将处于访存阶段、回写阶段的指令对HI、LO寄存器的操作信息反馈到执行阶段,执行阶段依据这些信息,确定HI、LO寄存器的正确值。

总结

我们在本章学到了移动操作指令的实现以及又处理了流水线数据相关。内容很好理解,后面的指令学起来也是大概也这样的,但也会越来越难的,我们继续加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值