当前位置: 首页 > news >正文

MIPSsim模拟器 使用说明

(一) 启动模拟器

        双击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所示。(在非流水方式下,“段”没有意义)

断点窗口

 

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

添加

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

删除

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

 全部删除

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

修改

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

相关文章:

MIPSsim模拟器 使用说明

(一) 启动模拟器 双击MIPSsim.exe,即可启动该模拟器。模拟器启动时,自动将自己初始化为默认状态。所设置的默认值为: u所有通用寄存器和浮点寄存器为全0; u内存清零; u流水寄存器为全0&#xff…...

javascript用localStorage存储用户搜索词记录,并在搜索框下展显搜索词记录

//首先是storage的一封装 //storage.js文件 function storage(){//设置storage密钥this.ms"mystorage";}//以下为函数的原型方法//获得localStorage值storage.prototype.getLocalfunction(key){//先检查设置的localStorage的密钥var mydatalocalStorage.getItem(thi…...

20231108在Ubuntu22.04下编译安装cmake-3.27.7.tar.gz

20231108在Ubuntu22.04下编译安装cmake-3.27.7.tar.gz 2023/11/8 17:28 缘起,编译cv180zb的时候提示说cmake的版本低! OBJCOPY platform/generic/firmware/payloads/test.bin OBJCOPY platform/generic/firmware/fw_dynamic.bin OBJCOPY platfor…...

如此理解sed会简单

缘由 以前总觉得sed的语法过于难懂,用的时间都不一定会想起来怎么用。 每次都需要先查找帮助,然后才能应用,但随后又忘 😦 直到今天通过man sed链接到sed官网上对sed的介绍,才明白它竟然是如此的简单明了&#xff0…...

数据库-MySQL之数据库必知必会1-9章

检索数据 1.检索不重复的行 从 Customers 表中检索所有的 ID select DISTINCT cust_id from Customers;DISTINCT表示去掉重复的行 2.限制结果-分页 SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。…...

Selenium+Python自动化测试环境搭建

selenium python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。 Selenium 框架底层使用JavaS…...

k8s存储卷 PV和PVC

目录 emptyDir存储卷 hostPath存储卷 nfs共享存储卷 PVC 和 PV 生命周期 一个PV从创建到销毁的具体流程如下: 静态pvc 动态pvc 3、定义PVC 4、测试访问 搭建 StorageClass NFS,实现 NFS 的动态 PV 创建 1、在stor01节点上安装nfs&#xff0…...

【架构】后端项目经典分层架构介绍

文章目录 前言分层架构项目实践示例项目结构 其他知识 前言 开发后端项目时,我们最常见的一种架构模式就是分层架构 。 所谓的分层架构,就是把系统自上而下分为多个不同的层,每一层都有特定的功能和职责,且只和自己的直接上层与…...

二叉树的中序遍历

一、题目。 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:…...

什么是代理IP池?真实测评IP代理商的IP池是否真实?

代理池充当多个代理服务器的存储库,提供在线安全和匿名层。代理池允许用户抓取数据、访问受限制的内容以及执行其他在线任务,而无需担心被检测或阻止的风险。代理池为各种在线活动(例如网页抓取、安全浏览等)提高后勤保障。 读完…...

接收表单数据

如果您尝试按下提交按钮,浏览器将显示“Method Not Allowed”错误。这是因为到目前为止,前一节中的登录视图函数完成了一半的工作。它可以在网页上显示表单,但是还没有逻辑来处理用户提交的数据。这是Flask-WTF使工作变得非常简单的另一个领域…...

串口通信(11)-CRC校验介绍算法

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…...

什么是Java虚拟机(JVM),它的作用是什么?

什么是Java虚拟机(JVM) Java虚拟机(Java Virtual Machine,JVM)是Java平台的关键组成部分,它是一种在不同操作系统上运行Java程序的虚拟计算机。 JVM的作用是执行Java字节码(Java bytecode&#…...

力扣876:链表的中间结点

力扣876:链表的中间结点 题目描述: 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5]…...

三菱FX3U系列—原点回归指令

目录 一、简介 二、指令形式 1、原点指令[ZRN/DZRN] 2、带搜索的原点回归指令[DSZR] 三、回归指令运行过程 1、ZRN原点回归运行过程 2、带搜索的原点回归运行过程 四、特殊辅助继电器 五、特殊输出模块 六、总结 一、简介 用于将电机或伺服驱动器控制的轴回到预定的原…...

ES常用查询命令

一、基本命令 1、获取所有_cat命令 curl -X GET localhost:9200/_cat 2、获取es集群服务健康状态 curl -X GET localhost:9200/_cat/health?v epoch: 时间戳的 Unix 时间戳格式,表示快照生成的时间。 timestamp: 可读性更强的时间戳格式,表示快照生…...

【Qt之元对象系统】

描述 Qt的元对象系统(Meta-Object System)是Qt框架的核心机制之一,它提供了运行时类型信息(RTTI)和信号与槽(Signals and Slots)机制的支持。元对象系统在Qt中扮演了很重要的角色,它…...

基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储

基于FPGA的EMAC模块与FIFO模块:高速数据传输与存储 在现代社会,高速数据传输和存储是信息技术领域的关键问题之一。而基于FPGA的EMAC模块与FIFO模块则成为了解决这些问题的重要途径。本文将介绍这两个模块的原理、实现方法以及如何在FPGA中应用它们。 …...

大数据毕业设计选题推荐-农作物观测站综合监控平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

高校教务系统登录页面JS分析——长沙理工大学教务系统

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文将是本专栏最后一篇文章,我看了绝大多数高…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

OpenLayers 分屏对比(地图联动)

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...