
MIPSsim使用手册.docx
12页1.4 MIPSsim 使用手册1.4.1 启动模拟器双击 MIPSsim.exe,即可启动该模拟器 MIPSsim 是在 Windows 操作系统上运行的程序,它需要用.NET 运行环境如果你的机器没有该环境,请先下载和安装“Microsoft .NET Framework 2.0 版可再发行组件包 ”模拟器启动时,自动将自己初始化为默认状态所设置的默认值为: 所有通用寄存器和浮点寄存器为全 0; 内存清零; 流水寄存器为全 0; 清空时钟图、断点、统计数据; 内存大小为 4096 字节; 载入起始地址为 0; 浮点加法、乘法、除法部件的个数均为 1; 浮点加法、乘法、除法运算延迟分别为 6、7、10 个时钟周期; 采用流水方式; 不采用定向机制; 不采用延迟槽; 采用符号地址; 采用绝对周期计数当模拟器工作在非流水方式下(配置菜单中的“流水方式”前没有“√”号)时,下面叙述中有关流水段的内容都没有意义,应该忽略之1.4.2 MIPSsim 的窗口在流水方式下,模拟器主界面中共有 7 个子窗口,它们是:代码窗口、寄存器窗口、流水线窗口、时钟周期图窗口、内存窗口、统计窗口和断点窗口。
每一个窗口都可以被收起(变成小图标) 、展开、拖动位置和放大/缩小当要看窗口的全部内容时,可以将其放大到最大在非流水方式下,只有代码窗口、寄存器窗口、内存窗口和断点窗口1. 代码窗口代码窗口给出内存中代码的列表,每条指令占一行,按地址顺序排列每行有 5 列(当全部显示时):地址、断点标记、指令的机器码、流水段标记和符号指令如图 1.1所示图 1.1 代码窗口图中不同抹色的行代表相应的指令所处的执行段黄色代表 IF 段,绿色代表 ID 段,红色代表 EX 段,青色代表 MEM 段,棕色代表 WB 段该窗口中各列的含义如下: 地址:以 16 进制的形式给出内存是按字节寻址的,每条指令占 4 个字节当采用符号地址时,会在相应的位置给出汇编程序中出现的标号 断点标记:如果在该指令处设有断点,则显示相应的标记断点标记的形式为B.X(X 为段名) ,表示该断点是设置在该指令的 “X”段例如,若某行的断点标记为“B.EX” ,则表示在该指令的 EX 段设置了断点当模拟器工作在非流水方式下时,断点的标记为 B 机器码:该行所对应的指令的十六进制机器码若该行无指令,则仅仅显示 4 字节数据; 流水段标记:表示当该指令正在执行时,它在当前周期该指令所处的流水段。
当模拟器工作在非流水方式下时,它没有意义 符号指令:机器代码所对应的符号指令在该窗口中选中某行(用鼠标左键单击) ,然后再点击鼠标右键,就会弹出菜单:设置断点,清除断点,它们分别用于在所选指令处设置断点和清除断点 设置断点选择(点击)要设断点的指令点击右键“设置断点” ,弹出“设置断点”小对话框,在“段”的下拉框中选择断点所在的流水段(在非流水方式下,不存在该下拉框) ,单击“确定”即可 清除断点选择(点击)指令点击右键“清除断点” ,则设置在该指令处的断点被删除2. 寄存器窗口寄存器窗口显示 MIPSsim 模拟器中的寄存器的内容共有 4 组寄存器:通用寄存器、浮点寄存器、特殊寄存器和流水寄存器,分为 4 栏来显示每一栏下分别有各自的数据格式选项,如图 1.2 所示图 1.2 寄存器窗口(1) 通用寄存器MIPS64 有 32 个 64 位通用寄存器:R0,R1,…,R31 它们被简称为GPRs( General-Purpose Registers) ,有时也被称为整数寄存器R0 的值永远是 0通过数据格式选项,可以选择显示的格式是十进制还是十六进制2) 浮点寄存器共有 32 个 64 位浮点数寄存器:F0,F1,…,F31 。
它们被简称为 FPRs(Floating-Point Registers) 它们既可以用来存放 32 个单精度浮点数( 32 位) ,也可以用来存放 32 个双精度浮点数(64 位) 存储单精度浮点数(32 位)时,只用到 FPR 的一半,其另一半没用3) 特殊寄存器特殊寄存器有 4 个: PC:程序计数器(32 位) ; LO:乘法寄存器的低位; HI:乘法寄存器的高位; FCSR:浮点状态寄存器4) 流水寄存器 IF/ID.IR:流水段 IF 与 ID 之间的指令寄存器; IF/ID.NPC:流水段 IF 与 ID 之间的下一指令程序计数器; ID/EX.A:流水段 ID 与 EX 之间的第一操作数寄存器; ID/EX.B:流水段 ID 与 EX 之间的第二操作数寄存器; ID/EX.Imm:流水段 ID 与 EX 之间的立即数寄存器; ID/EX.IR:存放从 IF/ID.IR 传过来的指令; EX/MEM.ALUo:流水段 EX 与 MEM 之间的 ALU 计算结果寄存器; EX/MEM.IR:存放从 ID/EX.IR 传过来的指令; MEM/WB.LMD:流水段 MEM 与 WB 之间的数据寄存器,用于存放从存储器读出的数据; MEM/WB.ALUo:存放从 EX/MEM.ALUo 传过来的计算结果; MEM/WB.IR:存放从 EX/MEM.IR 传过来的指令。
除了流水寄存器外,其他寄存器都可以修改只要双击某寄存器所在的行,系统就会弹出一个小对话框该对话框显示了该寄存器原来的值在新值框中填入新的值,然后点击“保存” ,系统就会将新值写入该寄存器3. 流水线窗口流水线窗口显示流水线在当前配置下的组成以及该流水线的各段在当前周期正在处理的指令如图 1.3 所示非流水方式下,没有该窗口图 1.3 流水线窗口在该窗口中,每一个矩形方块代表一个流水段,它们用不同的颜色填充在该窗口的左侧是 IF 到 WB 段,其右边为浮点部件浮点部件分有浮点加法部件( fadd) 、浮点乘法部件(fmul)和浮点除法部件( fdiv)三种在菜单“配置” “常规配置”中修改浮点部件个数,可看到该窗口中对应类型的浮点部件个数会发生相应的变化在运行过程中,各段的矩形方块中会显示该段正在处理的指令及其地址(16 进制) 当双击某矩形方块时,会弹出窗口显示该段出口处的流水寄存器的内容(16 进制) 4. 时钟周期图窗口该窗口用于显示程序执行的时间关系,画出各条指令执行时所用的时钟周期非流水方式下,没有该窗口以窗口左上为原点,横轴正方向指向右方,表示模拟器先后经过的各个周期(列) ,纵轴正方向指向下方,表示模拟器中先后执行的各条指令(行) 。
如图 1.4 所示图 1.4 时钟周期图窗口横坐标有相对周期计数和绝对周期计数两种不同的表示形式在默认的绝对周期计数下,按 0、1、2、… 依次递增的顺序计数而在相对周期计数下,当前周期记为第 0 个周期,而其余周期(在左边)则按其相对于当前周期的位置,分别记为-1,-2 ,-3,…等在由指令轴和周期轴组成的二维空间下,坐标(n, i)对应的矩形区域表示指令 i 在第n+1 周期时所经过的流水段(假设采用绝对周期计数) 双击某行时,会弹出一个小窗口,显示该指令在各流水段所进行的处理该窗口中还显示定向的情况这是用箭头来表示的若在第 m 周期和第 m+1 周期间产生从指令 i1 到指令 i2 的定向,则在坐标(m, i1)和(m+1, i2)表示的矩形区域之间会有一个箭头5. 内存窗口该窗口显示模拟器内存中的内容,左侧一栏为十六进制地址,右侧为数据,如图 1.5 所示可以直接通过双击来修改其内容这时会弹出一个“内存修改 ”对话框,如图 1.6 所示对话框的上部区域为数据类型与格式选择区,通过勾选其中的一项,就可以指定所采用的数据类型与格式图 1.5 内存窗口图 1.6 “内存修改”对话框在该“内存修改”对话框中,地址框最开始显示的是被双击的单元的地址,用户可以直接修改该地址。
在新值框中输入新值,然后点击按钮“修改 ”,模拟器就会把新值写入内存中相应的单元新值的格式必须与所选的数据类型和格式一致前地址”与“后地址”按钮分别将当前地址减少和增加一个数据长度(字节数) ,并显示当前地址所指定单元的内容 “前地址”和“后地址”用于连续修改一片的内存数据显示”按钮用于显示当前地址所指单元的内容在修改地址后,点击该按钮就可以显示内存单元的内容6. 统计窗口该窗口显示模拟器统计的各项数据如下所示非流水方式下,没有该窗口)汇总:执行周期总数:0ID 段执行了 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%7. 断点窗口断点一般是指指定的一条指令,当程序执行到该指令时,会中断执行,暂停在该指令上。
在本模拟器中,断点可以设定在某条指令的某一个流水段上(如果是在流水方式下) 当该指令执行到相应的流水段时,会中断执行断点窗口列出当前已经设置的所有断点,每行一个每行由 3 部分构成:地址(16 进制) ,流水段名称,符号指令如图 1.7 所示 (在非流水方式下, “段”没有意义)图 1.7 断点窗口该窗口上方有四个按钮:添加、删除、全部删除、修改 添加单击“添加” ,会弹出小对话框“设置断点” ,在“地址”框中输入断点的十六进制地址,在“段”的下拉框中选择在哪个流水段中断(非流水方式下,不需要该操作,下同) ,单击“确定”即可 删除选中某个断点(单击断点列表中相应的一项) ,单击“删除” ,则该断点被清除 全部删除单击“全部删除” ,所有断点都将被清除 修改选中某个断点,单击“修改” ,会弹出小对话框“设置断点” ,在“地址”框中输入断点的地址,在“段”的下拉框中选择在哪个流水段中断,单击 “确定”即可将原断点修改为新设断点1.4.3 MIPSsim 的菜单1. 文件菜单文件菜单如下所示:(1) CPU 复位将模拟器中 CPU 的状态复位为默认值2) 全部复位将整个模拟器的状态复位为默认值。
模拟器启动时,也是将状态设置为默认值3) 载入程序将被模拟程序载入模拟器的内存被模拟程序可以是汇编程序(.s 文件) ,也可以是汇编后的代码(.bin 文件) 点击该菜单后,系统将弹出 “载入 ”对话框,选择要载入的文件,然后点击“打开” 如果是.s 文件,系统会对该文件进行汇编若汇编过程无错误,则将产生的二进制代码载入至模拟器的内存;若有错误,则报告错误信息如果是.bin 文件,则直接将该文件的内容载入到模拟器内存被载入程序在内存中连续存放,其起始地址默认为 0。
