WinMIPS64工具进行MIPS指令集实验(二)

计算机系统(3) 实验一:MIPS64位指令集实验 计算机系统(3)实验1:mips基本指令。此文章着重完成终端IO以及两种排序的实现 阅读详情

在上一篇中,运行了一个测试程序,但是对于运行的结果以及那么多窗口每个窗口表示的含义还并不明确,所以本篇就来分析一下这些内容。

上一篇:WinMIPS64工具进行MIPS指令集实验(一)

地址:https://blog.youkuaiyun.com/SweeNeil/article/details/89466463

在上一篇我们最后得出了如下的运行结果,可以看到winmips64是以六个窗口来进行展示的,这六个窗口分别是:Pipeline, Code, Data, Registers, Statistics, Cycles。

实际上,在winmips64主窗口中,其实是有七个子窗口,和一条在底部的状态栏。这七个子窗口分别是Pipeline, Code, Data, Registers, Statistics, Cycles和Terminal。

但是好像我们最开始并没有找到Terminal窗口,那么它隐藏在哪里呢,我们再仔细看看上图中的左下角,发现其实还有一个窗口,它就是Terminal窗口,只是最开始它没有像另外六个窗口那样显眼:

我们可以把这个窗口放大:

了解了winmips64有7个子窗口,现在就开始一个一个揭开它们神秘的面纱。

1、Pipeline window

Pipeline window 显示了mips64处理器的五级流水线(IF、ID、EX、MEM、WB)和浮点运算(加、减、乘、除)的单元示意图。它展示出了流水线的每个阶段中都有哪些指令。

可以看到我们现在处于取指(IF)阶段的是 lw,此时它对应着:

lw r5,0(r1)

处于译码(ID)阶段的是 daddi ,此时对应着:

daddi r4,r0,6

处于执行(EX)阶段的是daddi,此时对应着:

daddi r3,r0,c

处于访存(MEM)阶段的是 daddi,此时对应着:

daddi r2,r0,b

处于回写(WB)阶段的是 daddi,此时对应着:

daddi r1,r0,a

在接下来的窗口中,将会看到更多与之相关的内容,例如即将讲解的Cycles Window。

2、Cycles Window

Cycles Window 它显示流水线的时空图,在窗口中,我们使用了Multi Cycle模式运行,模拟正在第五时钟周期,第一条指令正在WB段,第二条命令在Mem段,第三条指令处在EX段,第四条命令在处于ID段,第五条指令处于IF段。

使用快捷键继续执行,执行结果如下图所示,可以看到在有的周期,指令会处于停滞状态,我们可以看到最下面的两条指令:

daddi r4,r4,-1          
bnez r4,Loop  

 上述第二条指令会用到第一条指令 r4 寄存器中的值,但在这个时候 r4 寄存器中的值并不可用,所以必须等待 r4 寄存器的值可用才可继续往下执行,因此出现了停滞。这种情况也被称为 Data Hazards,有的翻译为 数据冒险。

同时我们可以看到,Cycles Window 又分为了两个子窗口,左边的子窗口是一系列的指令,右边的窗口是图示的指令执行过程。其中,左边子窗口的命令是动态出现的,当一条指令在进行“取值”时,该指令才出现,而且,当出现了 Data Hazards 的时候,所涉及到的指令会变色,暂停的指令会变成蓝色(如上图的:bnez r4,Loop ),而被其影响的后续指令会变成灰色。

3、Registers Window

Registers Window 显示存储在寄存器中的值。如果寄存器显示为灰色,则它正在被指令写入(如上图中的R4寄存器)。如果它用一种颜色表示,那么就代表,该颜色所代表的的流水线阶段的值可以用来进行前递(forwarding)。同时,Registers Window允许交互更改那些不在写入或转发过程中的64位整数和浮点寄存器的内容。

我们可以看到 Registers Window 中直接显示出了各个寄存器的值。

双击要更改的注册表,弹出窗口将询问是否有新内容,如下图所示,按“OK”便可确认更改。

4、Statistics Window

Statistics Window 用来记录一些模拟周期的统计数据。其中包括Execution,Stalls,和Code Size三个大项。

(1)Execution 用来显示模拟周期中指令数,执行周期数和CPI(每条指令所用周期数)。可以看到此时运行了22个周期,13条指令,现在的CPI为1.692。

(2)Stalls 用来表示暂停的周期数,并且分门别类的进行了统计,其中包括RAW Stalls,WAW Stalls,WAR Stalls, Structural Stalls, Branch Taken Stalls和Branch misprediction Stalls。

在现在的程序中只有 7 个RAW Stalls

(3)Code Size 表示了代码的大小,用byte表示,在这里为64Bytes。

5、Data Window

Data Window 可以观察到内存中的数据,包括数据内容和地址两个方面,其中地址使用64位表示。

如果想改变一个整型的数据的值,左键双击该值所在的行,如果是想改变一个浮点类型的数据的值,那么请右键双击该值所在的行,如下图所示,直接可以进行修改。

在上面的 Data Window 中,左边一行即为用64位表示的内存地址,中间行为数据的内容,右边的一行为相关的代码。

6、Code Window

Code Window 显示了三栏信息,从左到右依次为:

1)字节地址,

2)十六进制机器代码,

3)汇编语言语句。

从上图中可以看到,有的行被不同的颜色标识,这些不同的颜色代表指令分别处于不同的流水线阶段。黄色代表“取指(IF)”,蓝色代表“译码(ID)”,红色代表“执行(EX)”,绿色代表“内存数据读或写(MEM)”,紫色代表“写回(WB)”。

现在指令:

bnez r4,Loop

处于译码(ID)状态。

指令:

daddi r4,r4,-1 ; i++ 

处于写回(WB)状态。

指令:

end: halt

处于取指(IF)状态。

Code Window 结合 Cycles Window就可以更加直观的了解现在这个周期的运行情况:

7、Terminal Window

Terminal Window 模拟具有有限图形功能的I/O设备。

在这里我们的Terminal 为空,没有输出。

 

8、总结

结合这几个窗口的内容,我们将运行的结果进行了了解,通过这些窗口就可以很好地了解MIPS指令的运行特性。

 

体系结构实验(5)——分支预测 从第二轮循环开始,每次在分支跳转的过程中都可以从BTB表中找到PC值,因此不会有额外的分支跳转延时。循环的条件是R4不等于0。因此 在BTB表中未找到该PC值对应的预测分支目标地址,但是接下来第一条转移成功的指令,因此需要将该指令以及目标地址送入缓冲器中。总共99次的循环中,有三次预测失败(第一次和第二次以及最后一次),其余的均预测成功。在接下来的循环中,每次都预测成功,History和Prediction的表项保持不变。的值不为0,所以是转移成功指令,BTB中的该表项不会被移除,直到循环的最后一次。 阅读详情

相关推荐

WinMIPS64工具进行MIPS指令集实验(一)

一、安装WinMIPS64 1、下载WinMIPS64 本来是想传到优快云上的,传上去之后发现默认需要五个下载积分,找不到更改积分的接口所以链接就不贴上来了。 (1)自行网络下载 (2)百度网盘下载 链接:https://pan.baidu.com/s/1CiYcZfGHOmx1J3cl-q1yrw 提取码:wkmv 2、下载后将WinMIPS64解压到自己习惯的软件目录下 ...

SweeNeil 9766

WinMIps64指令集实验

目录MIPS寄存器种类算术及寻址指令Arithmetic InstructionsLoad / StoreIndirect and Based Addressing程序结构数据声明系统调用Control Structures**Branch****Jump****Subroutine Calls**MIPS指令集实验MinMIPS64模拟器IO内存映射hello world demobubble sort MIPS 寄存器种类 算术及寻址指令 Arithmetic Instructions !!!算术操作

weixin_45146520的博客 2309

计算机组成与设计(一)WinMIPS64

一、 实验目标: 了解WinMIPS64的基本功能和作用; 熟悉MIPS指令、初步建立指令流水执行的感性认识; 掌握该工具的基本命令和操作,为流水线实验作准备。   二、实验内容 按照下面的实验步骤及说明,完成相关操作记录实验过程的截图: 1)下载WinMIPS64;运行样例代码并观察软件各个观察窗口的内容和作用,掌握软件的使用方法。(80分) 2)学会正确使用WinMIPS64的...

Xindolia_Ring的博客 7115

计算机系统3实验一——WinMIPS64模拟器实验

能进到这篇博文的同学想必手头也拿到了作业的资料,这里废话我就不再赘述了,该实验主要是编写一个排序算法,下面直入主题。

m0_52711790的博客 2878

计组实验3 mips冒险之流水线冒险

目录前言流水线处理思想mips指令之五步走流水线冒险数据冒险调整指令顺序前推控制冒险结构冒险流水线冒险实验实验步骤数据冒险之调整顺序forwarding结构冒险之除法器占用实验结果总结于体会 前言 之前都在准备蓝桥杯,天天嗯刷leetcode,故咕了好久 。。。 蓝桥杯总结也咕了 彳亍 今天还是来更一下实验。这次的实验虽然操作简单,但是其背后的思想却值得回味,让我们对流水线处理的理解更进一步。 流水线处理思想 以洗衣服为例,假设我们有三个步骤: 浸泡 冲洗 烘干 同时我们有三台不同的设备(浸泡桶,洗衣机

AKGWSB 's blog 5640

计算机体系结构-实验一:WINMIPS实验环境

其中,左边子窗口的命令是动态出现的,当一条指令在进行“取指”时,该指令才出现,而且,当出现了数据相关的时候,所涉及到的指令会变色,暂停的指令会变成蓝色,而被其影响的后续指令会变成灰色。窗口的图示,其中,左边一行即为用64位表示的内存地址,中间行为数据的内容,右边的一行为相关的代码。接着按F7,直到第五个时钟周期的时候,有趣的事情发生了,“dadd r3,r4,r5”指令没有从“译码”跳到其下一个流水阶段“执行”,并且“sd r3,C(r0)”指令,仍然停留在“取指”阶段,同时在。

Chinatown666的博客 945

计算机指令集实验,WinMIPS64工具进行MIPS指令集实验(一)

一、安装WinMIPS641、下载WinMIPS64本来是想传到优快云上的,传上去之后发现默认需要五个下载积分,找不到更改积分的接口所以链接就不贴上来了。(1)自行网络下载(2)百度网盘下载链接:https://pan.baidu.com/s/1CiYcZfGHOmx1J3cl-q1yrw提取码:wkmv2、下载后将WinMIPS64解压到自己习惯的软件目录下例如我习惯将软件放到E盘里,那么我的...

weixin_31293733的博客 1893

MIPS64汇编指令集

MIPS指令R I J三种格式、MIPS五种寻址方式、WinMIPS64汇编指令

笔记 4096

MIPS指令集实验(计系三实验1)

了解WinMIPS64的基本功能和作用;熟悉MIPS指令、初步建立指令流水执行的感性认识;掌握该工具的基本命令和操作,为流水线实验作准备。按照下面的实验步骤及说明,完成相关操作记录实验过程的截图1)下载WinMIPS64;运行样例代码并观察软件各个观察窗口的内容和作用,掌握软件的使用方法。(80分)2)学会正确使用WinMIPS64的IO方法;(10分)3)编写完整的排序程序;(10分)硬件:桌面PC软件:Windows,WinMIPS64仿真器。

m0_63790127的博客 2266

WinMIPS64模拟器

WinMIPS64是一款指令集模拟器,它是基于WinDLX设计的,WinMIPS64模拟器能够演示MIPS64流水线是如何工作的。

winmips64软件

winmips64 64位 测试流水线软件,汇编语言,包含测试用代码

MIPS64乘法器模拟实验(计系3实验二)

本实验介绍了通过加法器来设计乘法器的原理,并且在编写该实验程序的时候,我们更加了解了:1、计算机乘法器工作原理的内容;上述的程序,用加法实现了32位乘法,但是,其中,对溢出情况没有进行考虑是其中的弊端。当结果大于32位时,结果只截取了低32位的结果,而高32位的结果直接忽略掉了。运行显示运行结果的例子如下,由于我们这里展示的是忽略了溢出的乘法,所以结果有两种:1、小于32位;上述代码运行结果也有两个,一个是没有溢出的情况下的结果,一个是溢出了的情况下的结果。1、忽略溢出的乘法器。2、溢出提示的乘法器。

m0_63790127的博客 1432

WinMIPS64.rar 计算机体系结构实验 流水线相关和指令调度实验

流水线相关和指令调度实验所用,WinMIPS64的浮点加法和浮点乘法的执行阶段进行了流水处理,所以不会导致结构冒险。

深圳大学-计算机系统(3)-实验二MIPS64乘法器模拟实验

第一部分实验让我更深入理解了乘法运算的基本逻辑,以及如何通过加法器来实现乘法。它让我认识到许多复杂的运算其实可以通过简单的逻辑单元来实现,进一步加深了我对计算机硬件工作的理解。第二部分实验让我体会到计算机如何通过额外的检查和控制逻辑来保证计算结果的正确性。这个过程不仅考验了我的逻辑思维能力,还让我认识到现代计算机处理器在执行复杂运算时对错误检测与处理的重视。

纯粹的摆烂狗的博客 1486

NVIDIA Video Codec SDK-解码接口cuvid简介

特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。

fudexiang的博客 1180

基于云平台的ATS系统微服务架构方案研究

在当前智慧地铁的升级转型过程中,城市轨道交通ATS系统面临着稳定性差、运维方 式繁琐和故障应急处理效率低等问题。为此,提出一种基于云平台的ATS系统微服务架构方案; 研究了ATS系统在云平台上的微服务总体架构、ATS应用的微服务划分和设计、容器部署方式 及通信交互模式,可实现系统松耦合和易扩展,达到节约计算资源、提高系统稳定性和运营效 率的目的

mi_lan1的博客 966

WinMIPS64之32位乘法器和除法器的模拟实验

WinMIPS64 32位乘法器&除法器 模拟实验 文章目录WinMIPS64 32位乘法器&除法器 模拟实验一、实验内容二、实验环境三、实验步骤1. 忽略溢出的乘法器2. 溢出提示的乘法器3. 基础除法器的实现4. 乘除中正负号的处理四、实验总结 一、实验内容 第一部分:用加法器设计一个不考虑溢出的乘法器 第二部分:用加法器设计一个考虑溢出的乘法器 第三部分:用减法器设计一个除法器 (额外尝试) 二、实验环境 硬件:桌面PC 软件:Windows,WinMIPS64仿真器 三、实验步骤

HYY的博客 3405

从SSTS到CTS:解码汽车电子架构中的需求与实现规范

本文深入解析汽车电子架构中SSTS(子系统功能规范)与CTS(零部件技术规范)的转换过程,揭示从抽象需求到物理实现的关键步骤。通过实际案例说明如何将SSTS的功能逻辑、接口定义和性能指标转化为具体的CTS实施方案,并分享多供应商协同与测试验证的最佳实践,帮助开发者高效完成汽车电子系统开发。

weixin_29201859的博客 500

深圳大学-计算机系统(3)-实验一MIPS指令集实验

通过本次实验,我学会了WinMIPS64的基本操作,例如如何载入程序、运行程序等。通过本次实验,我还对流水线有了基本的认识,每个指令就像传送带的货物一样,五个节拍就像是处理货物的机器一般,每个货物在传送带一直往前,指令不断地进行每个节拍,如果有一个节拍暂时无法进行,那么将会等待直到可以执行为止,此时后面的指令都会被阻塞。通过本次实验,我也认识到了流水线的优点:①允许同时执行多条指令的不同阶段,从而提高了处理器的吞吐量和效率②多条指令可以同时处于不同阶段,整体的指令执行时间会缩短。

纯粹的摆烂狗的博客 1432

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

利用ENVI处理TIF文件,把多个tif整合到一个完整的tif,例如2003-2011年的tif整合到一个tif上。

unique_sir的博客 1万+

系统架构设计师备考攻略

计算机软件资格考试是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试。 软考没有学历、专业、年龄、相关工作经验要求,你可以根据自身选择合适的去报名(也就是说你直接直接报高级),但是一次考试只能报一种。 计算机软件资格考试纳入全国专业技术人员职业资格证书制度的统一规划,实行统一大纲、统一试题、统一标准、统一证书的考试办法,每年举行两次。通过考试获得证书的人员,表明其已具备从事相应专业岗位工作的水平和能力,用人单位聘任相应专业技术职务(助理工程师、工程师、高级工程师)。

帅次的博客 7180

计算机组成原理(计算机系统3)--实验二:MIPS64乘法实现实验

计算机组成原理(计算机系统3)--实验二:MIPS64乘法实现实验。首先使用加法操作设计一个不检测溢出的乘法操作;完成后,对此进行优化,以期获得一个可以对溢出进行检测的乘法操作。

gyeolhada的博客 793

华为OD机试双机位C卷-水库溃坝填补(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【水库溃坝填补】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。水库溃坝填补。

qq_45776114的博客 2110

从流水线冒险到性能优化:MIPS指令集在WinMIPS64中的实战陷阱与突破

本文探讨了MIPS指令集在WinMIPS64模拟器中的流水线冒险问题及性能优化策略。通过分析数据冒险、结构冒险等瓶颈,并结合排序算法实战案例,详细介绍了指令重排、循环展开等优化技巧,有效提升指令级并行性和程序执行效率。

v5w6x的博客 221

如何用Python打造PubMed API客户端:科研文献检索自动化实践

PubMed提供了官方的Entrez E-utilities API接口,支持程序化检索文献,但直接调用API需处理请求重试、参数封装、数据解析等问题。批量获取文献ID及结构化详情(标题、作者、DOI等)内置重试机制,应对网络波动或API限流统一数据输出格式,便于后续分析(如文献计量、AI文本处理)灵活适配不同检索需求(如指定数据库、结果数量)本文实现的PubMed API客户端,通过封装API请求、重试机制、数据解析,让科研文献检索从“手动点击”变为“代码自动化”。

ASKCOS博客 359

Python爬虫实战:使用最新技术抓取百度贴吧帖子内容

本文详细介绍了使用Python最新技术抓取百度贴吧帖子的完整流程。通过库,我们实现了高效的异步爬虫,具备JavaScript渲染、智能反爬应对、数据持久化等高级功能。这个爬虫框架具有良好的扩展性,可以根据具体需求进行功能增强。

2201_76125261的博客 779
上一篇: WinMIPS64工具进行MIPS指令集实验(一)
下一篇: Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用
SweeNeil
博客等级 码龄9年 251粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值