MIPSsim模拟器 使用说明

news2024/11/23 11:17:38

(一) 启动模拟器

        双击MIPSsim.exe,即可启动该模拟器。模拟器启动时,自动将自己初始化为默认状态。所设置的默认值为:

u所有通用寄存器和浮点寄存器为全0;

u内存清零;

u流水寄存器为全0;

u清空时钟图、断点、统计数据;

u内存大小为4096字节;

u载入起始地址为0;

u浮点加法、乘法、除法部件的个数均为1;

u浮点加法、乘法、除法运算延迟分别为6、7、10个时钟周期;

u采用流水方式;

u不采用定向机制;

u不采用延迟槽;

u采用符号地址;

u采用绝对周期计数。

        当模拟器工作在非流水方式下(配置菜单中的“流水方式”前没有“√”号)时,下面叙述中有关流水段的内容都没有意义,应该忽略之。

(二)MIPSsim的窗口

        在流水方式下,模拟器主界面中共有7个子窗口,它们是:代码窗口、寄存器窗口、流水线窗口、时钟周期图窗口、内存窗口、统计窗口和断点窗口。每一个窗口都可以被收起(变成小图标)、展开、拖动位置和放大/缩小。当要看窗口的全部内容时,可以将其放大到最大。

        在非流水方式下,只有代码窗口、寄存器窗口、内存窗口和断点窗口。

代码窗口

        代码窗口给出内存中代码的列表,每条指令占一行,按地址顺序排列。每行有5列(当全部显示时):地址、断点标记、指令的机器码、流水段标记和符号指令。如图所示。

代码窗口

        图中不同抹色的行代表相应的指令所处的执行段。黄色代表IF段,绿色代表ID段,红色代表EX段,青色代表MEM段,棕色代表WB段。

该窗口中各列的含义如下:

u地址:以16进制的形式给出。内存是按字节寻址的,每条指令占4个字节。当采用符号地址时,会在相应的位置给出汇编程序中出现的标号。

u断点标记:如果在该指令处设有断点,则显示相应的标记。断点标记的形式为B.X(X为段名),表示该断点是设置在该指令的“X”段。例如,若某行的断点标记为“B.EX”,则表示在该指令的EX段设置了断点。当模拟器工作在非流水方式下时,断点的标记为B。

u机器码:该行所对应的指令的十六进制机器码。若该行无指令,则仅仅显示4字节数据;

u流水段标记:表示当该指令正在执行时,它在当前周期该指令所处的流水段。当模拟器工作在非流水方式下时,它没有意义。

u符号指令:机器代码所对应的符号指令。

        在该窗口中选中某行(用鼠标左键单击),然后再点击鼠标右键,就会弹出菜单:设置断点,清除断点,它们分别用于在所选指令处设置断点和清除断点。

l设置断点

        选择(点击)要设断点的指令à点击右键à“设置断点”,弹出“设置断点”小对话框,在“段”的下拉框中选择断点所在的流水段(在非流水方式下,不存在该下拉框),单击“确定”即可。

l清除断点

选择(点击)指令à点击右键à“清除断点”,则设置在该指令处的断点被删除。

寄存器窗口

        寄存器窗口显示MIPSsim模拟器中的寄存器的内容。共有4组寄存器:通用寄存器、浮点寄存器、特殊寄存器和流水寄存器,分为4栏来显示。每一栏下分别有各自的数据格式选项,如图所示

寄存器窗口

 

(1)通用寄存器

        MIPS64有32个64位通用寄存器:R0,R1,…,R31。它们被简称为GPRs(General-PurposeRegisters),有时也被称为整数寄存器。R0的值永远是0。通过数据格式选项,可以选择显示的格式是十进制还是十六进制。

(2)浮点寄存器

        共有32个64位浮点数寄存器:F0,F1,…,F31。它们被简称为FPRs(Floating-PointRegisters)。它们既可以用来存放32个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用。

(3)特殊寄存器

特殊寄存器有4个:

uPC:程序计数器(32位);

uLO:乘法寄存器的低位;

uHI:乘法寄存器的高位;

uFCSR:浮点状态寄存器。

(4)流水寄存器

uIF/ID.IR:流水段IF与ID之间的指令寄存器;

uIF/ID.NPC:流水段IF与ID之间的下一指令程序计数器;

uID/EX.A:流水段ID与EX之间的第一操作数寄存器;

uID/EX.B:流水段ID与EX之间的第二操作数寄存器;

uID/EX.Imm:流水段ID与EX之间的立即数寄存器;

uID/EX.IR:存放从IF/ID.IR传过来的指令;

uEX/MEM.ALUo:流水段EX与MEM之间的ALU计算结果寄存器;

uEX/MEM.IR:存放从ID/EX.IR传过来的指令;

uMEM/WB.LMD:流水段MEM与WB之间的数据寄存器,用于存放从存储器

读出的数据;

uMEM/WB.ALUo:存放从EX/MEM.ALUo传过来的计算结果;

uMEM/WB.IR:存放从EX/MEM.IR传过来的指令。

除了流水寄存器外,其他寄存器都可以修改。只要双击某寄存器所在的行,系统就会弹出一个小对话框。该对话框显示了该寄存器原来的值。在新值框中填入新的值,然后点击“保存”,系统就会将新值写入该寄存器。

流水线窗口

        流水线窗口显示流水线在当前配置下的组成以及该流水线的各段在当前周期正在处理的指令。如图所示。非流水方式下,没有该窗口。

 

流水线窗口

    在该窗口中,每一个矩形方块代表一个流水段,它们用不同的颜色填充。在该窗口的左侧是IF到WB段,其右边为浮点部件。浮点部件分有浮点加法部件(fadd)、浮点乘法部件fmul)和浮点除法部件(fdiv)三种。在菜单“配置”à“常规配置”中修改浮点部件个数,可看到该窗口中对应类型的浮点部件个数会发生相应的变化。

    在运行过程中,各段的矩形方块中会显示该段正在处理的指令及其地址(16进制)。当双击某矩形方块时,会弹出窗口显示该段出口处的流水寄存器的内容(16进制)。

时钟周期图窗口

        该窗口用于显示程序执行的时间关系,画出各条指令执行时所用的时钟周期。非流水方式下,没有该窗口。以窗口左上为原点,横轴正方向指向右方,表示模拟器先后经过的各个周期(列),纵轴正方向指向下方,表示模拟器中先后执行的各条指令(行)。如图所示。

时钟周期图窗口

    横坐标有相对周期计数和绝对周期计数两种不同的表示形式。在默认的绝对周期计数下,按0、1、2、… 依次递增的顺序计数。而在相对周期计数下,当前周期记为第0个周期,而其余周期(在左边)则按其相对于当前周期的位置,分别记为-1,-2,-3,…等。

        在由指令轴和周期轴组成的二维空间下,坐标(n, i)对应的矩形区域表示指令i在第n+1周期时所经过的流水段(假设采用绝对周期计数)。

        双击某行时,会弹出一个小窗口,显示该指令在各流水段所进行的处理。该窗口中还显示定向的情况。这是用箭头来表示的。若在第m周期和第m+1周期间产生从指令i1到指令i2的定向,则在坐标(m, i1)和(m+1, i2)表示的矩形区域之间会有一个箭头。

内存窗口

    该窗口显示模拟器内存中的内容,左侧一栏为十六进制地址,右侧为数据,如图5所示。可以直接通过双击来修改其内容。这时会弹出一个“内存修改”对话框,如图6所示。对话框的上部区域为数据类型与格式选择区,通过勾选其中的一项,就可以指定所采用的数据类型与格式。

 

内存窗口

“内存修改”对话框

     在该“内存修改”对话框中,地址框最开始显示的是被双击的单元的地址,用户可以直接修改该地址。在新值框中输入新值,然后点击按钮“修改”,模拟器就会把新值写入内存中相应的单元。新值的格式必须与所选的数据类型和格式一致。

     “前地址”与“后地址”按钮分别将当前地址减少和增加一个数据长度(字节数),并显示当前地址所指定单元的内容。“前地址”和“后地址”用于连续修改一片的内存数据。“显示”按钮用于显示当前地址所指单元的内容。在修改地址后,点击该按钮就可以显示内存单元的内容。

统计窗口

        该窗口显示模拟器统计的各项数据。如下所示。(非流水方式下,没有该窗口)

  汇总:

    执行周期总数:0

    ID段执行了0条指令

  硬件配置:

    内存容量:4096 B

    加法器个数:1                执行时间(周期数):6

    乘法器个数:1                执行时间(周期数)7         

    除法器个数:1                执行时间(周期数)10                

    定向机制:不采用

  停顿(周期数):

    RAW停顿:0          占周期总数的百分比:0%

    其中:

      load停顿:0                占所有RAW停顿的百分比:0%

      分支/跳转停顿:0               占所有RAW停顿的百分比:0%

      浮点停顿:0                占所有RAW停顿的百分比:0%

    WAW停顿:0         占周期总数的百分比:0%

    结构停顿:0            占周期总数的百分比:0%

    控制停顿:0            占周期总数的百分比:0%

    自陷停顿:0            占周期总数的百分比:0%

    停顿周期总数:0   占周期总数的百分比:0%

  分支指令:

    指令条数:0            占指令总数的百分比:0%

    其中:

      分支成功:0                占分支指令数的百分比:0%

      分支失败:0                占分支指令数的百分比:0%

  load/store指令:

    指令条数:0            占指令总数的百分比:0%

    其中:

      load:0        占load/store指令数的百分比:0%

      store:0                占load/store指令数的百分比:0%

  浮点指令:

    指令条数:0            占指令总数的百分比:0%

其中:

      加法:0                占浮点指令数的百分比:0%

      乘法:0                占浮点指令数的百分比:0%

      除法:0                占浮点指令数的百分比:0%

  自陷指令:

    指令条数:0            占指令总数的百分比:0%

断点窗口

        断点一般是指指定的一条指令,当程序执行到该指令时,会中断执行,暂停在该指令上。在本模拟器中,断点可以设定在某条指令的某一个流水段上(如果是在流水方式下)。当该指令执行到相应的流水段时,会中断执行。

        断点窗口列出当前已经设置的所有断点,每行一个。每行由3部分构成:地址(16进制),流水段名称,符号指令。如图7所示。(在非流水方式下,“段”没有意义)

断点窗口

 

该窗口上方有四个按钮:添加、删除、全部删除、修改。

添加

单击“添加”,会弹出小对话框“设置断点”,在“地址”框中输入断点的十六进制地址,在“段”的下拉框中选择在哪个流水段中断(非流水方式下,不需要该操作,下同),单击“确定”即可。

删除

选中某个断点(单击断点列表中相应的一项),单击“删除”,则该断点被清除。

 全部删除

单击“全部删除”,所有断点都将被清除。

修改

选中某个断点,单击“修改”,会弹出小对话框“设置断点”,在“地址”框中输入断点的地址,在“段”的下拉框中选择在哪个流水段中断,单击“确定”即可将原断点修改为新设断点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1194281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dapp开发流程以及应用

随着区块链技术的发展和普及,Dapp(去中心化应用)逐渐成为了区块链领域中备受关注的话题。Dapp是一种运行在区块链网络上的应用程序,具有去中心化、透明、安全、自治等特点,能够为人们提供更加便捷、高效、安全的应用体…

Essential Math for AI:高效的人工智能数学原理晋级读物

今天给大家介绍一本人工智能数学原理书籍:Essential Math for AI。作者是Hala Nelson,一位应用数学领域的美女博士,James Madison University (JMU) 大学的助理教授。 关注微信公众号:人工智能大讲堂,后台回复【ema】获…

使用反射调用私有内部类方法

使用反射调用私有内部类方法 通过反射机制调用私有内部类方法,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法 🍓情况一: 注意这里的内部类是私有静态内部类 待测类如下: package jj;import java.lang.reflect.Constru…

MySQL时间类型注意事项

MySQL常见的时间类型有YEAR、DATE、TIME、DATETIME、TIMESTAMP,绝大多数业务都是精确到秒的,所以通常用后两种。并且MySQL5.6以后后两种支持精度到毫秒(最多小数点后6位) DATETIME占8字节,不论要不要毫秒 TIMESTAMP占4…

三大赛题指南发布!2023 冬季波卡黑客松本周末开启 Workshop

2023 年一众黑客松赛事中,为什么我们建议您选择波卡黑客松大赛?或许答案在于——作为开发者极度友好的技术生态,波卡能够从参赛者的立场出发,为大家提供从 0 到 1 实现项目孵化成长的机会。这里聚集了一线技术专家的资源力量&…

【Spring】Spring IOCDI详解

文章目录 1. Spring是什么?2. 认识IOC2.1 传统程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.2 分析传统开发2.3 IOC程序开发1. Main.java2. Car.java3. Framework.java4. Bottom.java5. Tire.java 2.4 分析IOC开发2.5 IOC容器优点…

剑指offer(C++)-JZ21:调整数组顺序使奇数位于偶数前面(一)(算法-其他)

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数…

外贸SEO外链类型有哪些?外链建设如何做?

外贸SEO外链资源怎么找?海洋建站SEO外链优化方法? 外贸SEO外链在提高网站排名、吸引流量、增加品牌曝光方面发挥着重要作用。海洋建站将探讨外贸SEO外链的不同类型,帮助外贸企业更好地理解如何优化他们的在线营销策略。 外贸SEO外链&#x…

【PostgreSql高阶语法 】1、CASE WHEN THEN END用法

目录 1. 基础描述2. 用法举例2.1 基础使用2.1.1 方式12.1.2 方式 2 2.2 进行分组2.3 分组练习举例 1. 基础描述 目的:在SQL语句中添加判断条件,就要用到CASE WHEN THEN END用法:类似于java里面的switch语句,一组CASE WHEN THEN E…

香港和美国节点服务器的测试IP哪里有?

在选择服务器时,我们通常需要进行一些测试来评估其性能和稳定性。当然,这其中一个重要的测试指标就是服务器的 IP 地址。通过测试 IP 地址,我们可以了解到服务器所在地区以及网络连接质量等信息。作为香港及亚太数据中心领先服务商恒创科技&a…

五种常见的IO模型

目录 一. IO的概述 1.1 什么是IO 1.2 IO的效率问题 1.3 同步IO和异步IO的概念 二. 阻塞式IO 三. 非阻塞式IO 四. 信号驱动式IO 五. IO多路复用 六. 异步IO 七. 总结 一. IO的概述 1.1 什么是IO IO,表示输入输出,即:InPut / OutPut…

苹果15OTG音频转接器方案大卖-无敌成本加兼容性性价比直接拉满

手机拓展坞的组合有何意义?首先是数据存储场景,借助拓展坞扩展出的接口,可以连接U盘、移动硬盘等采用USB接口的设备,实现大文件的快速存储或者流转;其次是图片、视频的读取场景,想要读取相机、无人机SD/TF存…

第十周学习记录

阅读MARS MARS创新点: (1)实例感知。模拟器使用独立的网络分别对前景实例和背景环境进行建模,以便可以单独控制实例的静态(例如大小和外观)和动态(例如轨迹)属性。 (2)模块化。模拟器允许在不同的 NeRF 主干…

python操作链接数据库和Mysql中的事务在python的处理

python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库,且可以直接在python中执行sql语句 添加操作 import pymysql #1.创建链接对象c conn pymysql.Connect(host127.0.0.1,#数据库服务器主机地址port3306, #mysql的端口…

Pytest系列之参数化

1.parametrize()实现数据驱动 1.1 方法参数详解 pytest.mark.parametrize(arg_name, arg_value) arg_name:参数名称,用于将参数值传递给测试用例 arg_value:参数值(支持列表、字典列表、元组和字典元组),有n个值,那么测试用例就将执行n次…

node 第十七天 使用rsa非对称加密 实现前后端加密通信 JSEncrypt和node-rsa

什么是非对称加密 加密过程需要两个钥匙, 公钥和私钥 其中公钥用于加密明文, 私钥用于解密公钥加密的密文, 解密只可以用私钥 公钥和私钥是一对一的关系 公钥可以发送给用户, 不用担心泄露 私钥需要保存在服务端, 不能泄露 例如: 战场上,B要给A传递一条消息&#xf…

VC6.0 高亮扩展

输入关键字 "asist vc6.0" 点击网页: https://wws.lanzouj.com/isNmZe9ap2f 几秒后下载成功 在VS2021 安装以下这个扩展 打开vc6.0 代码有高亮了

Python四种常见实现排序方法,干活教程分享~

文章目录 1.冒泡排序2.选择排序3.快速排序4.插入排序关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1.冒泡排序…

软件模拟SPI协议的理解和使用编写W25Q64

SPI软件模拟的时序 SPI协议中,NSS、SCK、MOSI由主机产生,MISO由从机产生,在SCK每个时钟周期MOSI、MISO传输一位数据,数据的输入输出是同时进行的,所以读写数据也可以视作交换数据。所以读写时对数据位的控制都是用同一…

输出自然数-第10届蓝桥杯国赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第7讲。 输出自然数&#x…