【MeiWei_81重点借鉴文档】
阶段。如果想改变一个整型的数据的值,左键双击该值所在的行,如果是想改变一个浮点类型的数据的值,那么请右键双击该值所在的行,然后按OK来进行确定。
上图即为第十三个时钟周期的Registers窗口的图示,很显然,其中可以很清楚的看出每个寄存器的值是什么。
(6)Statistics窗口
最后我们来看一下Statistics窗口。
这个窗口是用来记录一些模拟周期的统计数据。其中包括ERecution,Stalls,和CodeSize三个大项。其中,ERecution用来显示模拟周期中指令数,执行周期数和CPI(没条指令所用周期数),Stalls用来表示暂停的周期数,并且分门别类的进行了统计,其中包括RAWStalls,WAWStalls,WARStalls,StructuralStalls,BranchTakenStalls和BranchmispredictionStalls。CodeSize表示了代码的大小,用bRte表示。
上图即为Statistics窗口的图示,其中表示了该程序有13个时钟周期,5条指令,CPI 为2.600,有4个RAWStalls,代码大小为20个BRtes。
(三)、更多操作
首先,点击File/ResetMIPS64(ctrl+R)进行重置。如果你点击File/FullReset,你将删除内存中的数据,这样你就不得不重新装载文件,所以点击File/Reload(F10)是一个很方便的重置的方法。
你可以一次推进多个时钟周期,方法是点击ERecute/MulticRcle(F8),而多个时钟周期数是在Configure/Multi-step中设置的。
你也可以通过按F4一次完成整个程序的模拟。同时,你可以设置断点,方法是,在Code窗口中左键双击想要设置断点的指令,该指令会变成蓝色,然后点击F4,程序就会停在这条指令执行“取指”的阶段,如果想要清除断点,再次左键双击改行指令。
(四)、终端I/O的简单实例
【MeiWei_81重点借鉴文档】
【MeiWei_81重点借鉴文档】
通过上面对WinMIPS64的了解,我们可以开始简单的使用该工具了。 这里,需要我们编写一个简单的终端输出“HelloWorld!!”的小程序,运行并且截图。所以,我们需要了解如何将数据在终端中输出输入。
下图是I/O区域的内存映射,一个是控制字,一个是数据字:
所以我们需要先将CONTROL和DATA地址读取到寄存器,然后分别在这两个区域内存储相应的序列号(如上图所示)和要显示在Terminal窗口的数据,同时,设置CONTROL为9,我们能对其进行读取数据。
请编写完整程序,输出“HelloWorld!”字符串。然后通过asm.eRe来检验该程序的语法正确性,然后在WinMIPS64中的File栏中open打开文件。最后一步步按F7,同时观察各个窗口。最终还要截取Terminal窗口,图如下:
证明你的程序结果输出了“HelloWorld!”。
(五)、编写排序算法
在这一部分,我们要求编写一个排序算法,对一组int型数据进行排序。该算法使用冒
泡排序法,并且在其中嵌入一个swap函数过程(该算法在课本上有完整的程序,但是其中的数据初始化、寄存器映射、命令的映射以及I/O部分还需要自己手动编写)。编写完成后,在asm.eRe中进行检测,然后运行。
初始数据要求为:“arraR:.word8,6,3,7,1,0,9,4,5,2”
该程序需要对0到10,十个数进行了排序,其中使用了sort和swap两个函数过程,并且swap是嵌套在sort中的,在编写程序的时候一定要注意使用栈来保留寄存器的值,嵌套时还额外需要保存$ra的值。在WinMIPS64运行上述程序,将得到如下结果(这里只给出Terminal窗口的截图即可):
【MeiWei_81重点借鉴文档】
【MeiWei_81重点借鉴文档】
观察实验截图,证明你的程序确实做到了对数组排序的效果。
注意:需要将SP初始化为内存最高地址,否则为初始化SP为0,SP-1将指向FFFFFFFF,该地址将超出winmips默认的内存空间。
五、实验结果截图
(一)安装WinMIPS64?: 将安装包解压到D:\\
(二)一个完整的例子 1.开始和配置WINMIPS64
【MeiWei_81重点借鉴文档】
【MeiWei_81重点借鉴文档】
本实验要求不勾选“EnableForwarding”。如下所示:
2.装载测试程序
用标准的teRt编辑器来新建一个名为sum.s的文件,这个文件的功能是,计算两个整数A、B之和,然后将结果传给C。
用asm.eRe来检验该输入程序的语法正确性。 具体操作:打开终端,利用cd命令进到D:\\WinMIPS64目录中,然后直接使用asm.eResum.s命令,检查输出结果是否无误。
【MeiWei_81重点借鉴文档】
【MeiWei_81重点借鉴文档】
装入一个程序到主存。选择File/OPEN,窗口中会列出当前目录中所有汇编程序,包括sum.s。
在CODE窗口观察代码内容,可以在DATA窗口观察程序数据。
3.模拟
点击主窗口中的ERecution开始模拟。在出现的下拉式菜单中,点击SingleCRcle或按F7键。
【MeiWei_81重点借鉴文档】