自己动手写CPU(4)移动操作指令的实现
自己动手写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)移动操作指令的实现相关推荐
- 【自己动手写CPU】除法指令的实现
说明 除法指令有两条:div,divu SPECIAL=000000 31-26 25-21 20-16 15-11 10-6 5-0 useage function SPECIAL rs rt 00 ...
- 【自己动手写CPU】异常相关指令的实现
MIPS架构中定义的异常类型 MIPS32架构中,有些事情打断程序的正常的执行流程,这些事情称为中断.陷阱.系统调用以及其他打断程序执行流程的情况,统称为异常. 此处的OpenMIPS处理器只实现了其 ...
- 自己动手写CPU(8)加载存储指令的实现
自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...
- 自己动手写CPU(5)简单算术操作指令实现_1
自己动手写CPU(5)简单算数操作指令实现_1 指令介绍 MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是: 简单算术指令 乘累加.乘累减指令 除法指令 算术指令操作介绍 一 ...
- 自己动手写CPU(3)逻辑、移位操作与空指令
自己动手写CPU(3)逻辑.移位操作与空指令 指令说明 MIPS32指令集架构中定义的逻辑操作指令有8条: and.andi.or.ori.xor.xori.nor.lui,其中 ori指令已经实现. ...
- 自己动手写CPU(1)五级流水线及CPU第一条指令ori
自己动手写CPU(1)五级流水线及CPU第一条指令ori 动机 不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh.正好之前看到一本<自己动手写CPU>,就按照此书 ...
- 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...
- 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书站点上, ...
- 自己动手写CPU之第七阶段(10)——除法指令实现过程1
将陆续上传本人写的新书<自己动手写CPU>,今天是第33篇,我尽量每周四篇 亚马逊的销售地址如下,欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8/r ...
最新文章
- UML学习---交互
- bzoj 2006 [NOI2010]超级钢琴 rmq+堆
- 每天一个linux命令(25):linux文件属性详解
- mysql四个字符串类型_mysql的数据类型4---字符串类型
- leetcode算法题--UTF-8 编码验证
- 在linux系统中安装VSCode(Visual Studio Code)
- yield %%% generator
- Elasticsearch 实例管理在京东的使用场景及演进之路
- mysql一样的查询在我本地很快但是线上很慢_Mysql读写分离原理及主众同步延时如何解决...
- 华为路由交换学习篇-VLAN虚拟局域网
- ACM学习历程—HDU 5025 Saving Tang Monk(广州赛区网赛)(bfs)
- java 中鼠标事件_Java中的鼠标事件
- 京东全民营业拿金币之辅助脚本网页版
- chain.doFilter
- 【教你赚钱】5分钟成为副业致富的独立开发者
- 圣盈信金服集团公布2018年上半年未经审计财务业绩
- 恭喜你,未来的CISSPer,你需要知道的背书全流程和小秘密
- 手眼标定算法---Navy算法(Robot sensor calibration: solving AX=XB on the Euclidean group)
- 吴恩达推荐好文:中国人工智能的崛起
- 【操作系统】进程-吸烟者问题
热门文章
- why there is error after adding DocumentHistories
- local sandbox getBootstrapScriptPath
- ERP text object hard code
- why in GM0 the extAddTo Controller is not loaded
- SAP UI5 dialog style max-height
- Price determination entry point - how is 4.85 calculated
- connect SAP Hybris Enterprise Commerce Platform to SAP Kyma
- 借助Fiddle使用不同版本的UI5库文件进行测试
- 使用windows activeX 在Webclient UI 中打开word文档
- Shortcut setting in Webclient UI