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

指令说明

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

指令格式

MOVN

当功能码为6’b001011时,表示是movn指令。指令用法为:movn rd, rs,rt。

指令作用为: if rt ≠0 then rd <- rs,判断地址为rt的通用寄存器的值。如果不为零,那么将地址为rs 的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变。movn是 Move Conditional on Not Zero的意思。

MOVZ

当功能码为6’b001010时,表示是movz指令。指令用法为:movz rd, rs, rt。
指令作用为: if rt = 0 then rd <- rs,与上面movn指令的作用正好相反,判断地址为rt的通用寄存器的值。如果为零,那么将地址为rs 的通用寄存器的值赋给地址为rd的通用寄存器;反之,保持地址为rd的通用寄存器不变。movz是 Move Conditional on Zero 的意思。

MFHI

当功能码为6’b010000时,表示是 mfhi 指令。指令用法为:mfhi rd。
指令作用为: rd <- hi,将特殊寄存器H的值赋给地址为rd的通用寄存器。

MFLO

当功能码为6’b010010时,表示是mflo指令。指令用法为:mflo rd。
指令作用为:rd <- lo,将特殊寄存器LO的值赋给地址为rd的通用寄存器。

MTHI

当功能码为6’b010001时,表示是mthi 指令。指令用法为: mthi rs。
指令作用为: hi<- rs,将地址为rs的通用寄存器的值赋给特殊寄存器HI。

MTLO

当功能码为6’b010011时,表示是mtlo指令。指令用法为:mtlo rs。
指令作用为: lo <- rs,将地址为rs的通用寄存器的值赋给特殊寄存器LO。

助记

MFxx为move from,MTxx为move to,这样是否需要读写特殊寄存器就可以记清了。

修改之处

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

修改后的系统结构

仿真结果

实验心得

开始时reg[4]最后的状态总是不对,不能到全0状态,debug后发现mfhi和mflo两条指令的译码阶段出现问题;分析代码后在译码模块中发现错误,inst[31:21]为全0的话会进另一个逻辑去判断而不会进op3的case语句中。以后编写代码时仍需谨慎!

项目链接

自己动手写CPU(4)移动操作指令的实现相关推荐

  1. 【自己动手写CPU】除法指令的实现

    说明 除法指令有两条:div,divu SPECIAL=000000 31-26 25-21 20-16 15-11 10-6 5-0 useage function SPECIAL rs rt 00 ...

  2. 【自己动手写CPU】异常相关指令的实现

    MIPS架构中定义的异常类型 MIPS32架构中,有些事情打断程序的正常的执行流程,这些事情称为中断.陷阱.系统调用以及其他打断程序执行流程的情况,统称为异常. 此处的OpenMIPS处理器只实现了其 ...

  3. 自己动手写CPU(8)加载存储指令的实现

    自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...

  4. 自己动手写CPU(5)简单算术操作指令实现_1

    自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...

  5. 自己动手写CPU(3)逻辑、移位操作与空指令

    自己动手写CPU(3)逻辑.移位操作与空指令 指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条: and.andi.or.ori.xor.xori.nor.lui,其中 ori指令已经实现. ...

  6. 自己动手写CPU(1)五级流水线及CPU第一条指令ori

    自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...

  7. 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...

  8. 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书站点上, ...

  9. 自己动手写CPU之第七阶段(10)——除法指令实现过程1

    将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...

最新文章

  1. UML学习---交互
  2. bzoj 2006 [NOI2010]超级钢琴 rmq+堆
  3. 每天一个linux命令(25):linux文件属性详解
  4. mysql四个字符串类型_mysql的数据类型4---字符串类型
  5. leetcode算法题--UTF-8 编码验证
  6. 在linux系统中安装VSCode(Visual Studio Code)
  7. yield %%% generator
  8. Elasticsearch 实例管理在京东的使用场景及演进之路
  9. mysql一样的查询在我本地很快但是线上很慢_Mysql读写分离原理及主众同步延时如何解决...
  10. 华为路由交换学习篇-VLAN虚拟局域网
  11. ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
  12. java 中鼠标事件_Java中的鼠标事件
  13. 京东全民营业拿金币之辅助脚本网页版
  14. chain.doFilter
  15. 【教你赚钱】5分钟成为副业致富的独立开发者
  16. 圣盈信金服集团公布2018年上半年未经审计财务业绩
  17. 恭喜你,未来的CISSPer,你需要知道的背书全流程和小秘密
  18. 手眼标定算法---Navy算法(Robot sensor calibration: solving AX=XB on the Euclidean group)
  19. 吴恩达推荐好文:中国人工智能的崛起
  20. 【操作系统】进程-吸烟者问题

热门文章

  1. why there is error after adding DocumentHistories
  2. local sandbox getBootstrapScriptPath
  3. ERP text object hard code
  4. why in GM0 the extAddTo Controller is not loaded
  5. SAP UI5 dialog style max-height
  6. Price determination entry point - how is 4.85 calculated
  7. connect SAP Hybris Enterprise Commerce Platform to SAP Kyma
  8. 借助Fiddle使用不同版本的UI5库文件进行测试
  9. 使用windows activeX 在Webclient UI 中打开word文档
  10. Shortcut setting in Webclient UI