码迷,mamicode.com
首页 > 移动开发 > 详细

自己动手写CPU之第六阶段(1)——移动操作指令说明

时间:2014-08-06 14:55:01      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:mips   处理器   开源   软核   自己动手写cpu   

将陆续上传本人写的新书《自己动手写CPU》(尚未出版),今天是第20篇,我尽量每周四篇


      本章将实现移动操作指令,首先在6.1节介绍了MIPS32指令集架构中定义的移动操作指令的格式、作用,接着在6.2节给出移动操作指令实现思路,介绍了修改后的数据流图、新出现的数据相关问题及其解决措施,并给出了修改后的OpenMIPS系统结构图。在6.3节列出了详细的修改过程。本章最后通过一个测试程序验证移动操作指令是否实现正确。

6.1 移动操作指令说明

      MIPS32指令集架构中定义的移动操作指令共有6条:movn、movz、mfhi、mthi、mflo、mtlo,后4条指令涉及到了对特殊寄存器HI、LO的读写操作,截止到本章,我们的OpenMIPS处理器只实现了32个通用寄存器、以及PC,所有的指令也只是对32个通用寄存器进行操作,还没有涉及特殊寄存器,本章将实现HI、LO这两个特殊寄存器。

      HI、LO寄存器用于保存乘法、除法结果。当用于保存乘法结果时,HI寄存器保存结果的高32位,LO寄存器保存结果的低32位;当用于保存除法结果时,HI寄存器保存余数,LO寄存器保存商。在后续“算术操作指令的实现”一章中,会进一步说明。

      这6条移动操作指令的格式如图6-1所示。

bubuko.com,布布扣

      从图6-1可知,这6条指令都是R类型指令,并且指令码都是6‘b000000,即均为SPECIAL类指令,同时,指令第6-10bit都为0,可以依据指令中0-5bit功能码的值判断是哪一种指令。各指令的用法及作用说明如下。

  •  当功能码为6‘b001011时,表示是movn指令

      指令用法为:movn rd, rs, rt

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

  • 当功能码为6‘b001010时,表示是movz指令

      指令用法为:movz rd, rs, rt

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

  • 当功能码为6‘b010000时,表示是mfhi指令

      指令用法为:mfhi rd

      指令作用为:rd <- hi,将特殊寄存器HI的值赋给地址为rd的通用寄存器。

  •  当功能码为6‘b010010时,表示是mflo指令

      指令用法为:mflo rd

      指令作用为:rd <- lo,将特殊寄存器LO的值赋给地址为rd的通用寄存器。

  • 当功能码为6‘b010001时,表示是mthi指令

      指令用法为:mthi rs

      指令作用为:hi <- rs,将地址为rs的通用寄存器的值赋给特殊寄存器HI。

  •  当功能码为6‘b010011时,表示是mtlo指令

      指令用法为:mtlo rs

      指令作用为:lo <- rs,将地址为rs的通用寄存器的值赋给特殊寄存器LO。


自己动手写CPU之第六阶段(1)——移动操作指令说明,布布扣,bubuko.com

自己动手写CPU之第六阶段(1)——移动操作指令说明

标签:mips   处理器   开源   软核   自己动手写cpu   

原文地址:http://blog.csdn.net/leishangwen/article/details/38399681

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!