MIPSsim使用说明
一、 启动模拟器
双击MIPSsim.exe,即可启动该模拟器。MIPSsim是在Windows操作系统上运行的程序,它需要用.NET运行环境。如果你的机器没有该环境,请先下载和安装“Microsoft .NET Framework 2.0 版可再发行组件包”。(对于64位机器,可能会出现导入程序时出现:试图加载格式不正确的程序的错误提示。解决办法:使用32位机器,或者导入32位的运行时库)
模拟器启动时,自动将自己初始化为默认状态。所设置的默认值为: ? 所有通用寄存器和浮点寄存器为全0; ? 内存清零;
? 流水寄存器为全0;
? 清空时钟图、断点、统计数据; ? 内存大小为4096字节; ? 载入起始地址为0;
? 浮点加法、乘法、除法部件的个数均为1;
? 浮点加法、乘法、除法运算延迟分别为6、7、10个时钟周期; ? 采用流水方式; ? 不采用定向机制; ? 不采用延迟槽; ? 采用符号地址; ? 采用绝对周期计数。
当模拟器工作在非流水方式下(配置菜单中的“流水方式”前没有“√”号)时,下面叙述中有关流水段的内容都没有意义,应该忽略之。 二、MIPSsim的窗口
在流水方式下,模拟器主界面中共有7个子窗口,它们是:代码窗口、寄存器窗口、流水线窗口、时钟周期图窗口、内存窗口、统计窗口和断点窗口。每一个窗口都可以被收起(变成小图标)、展开、拖动位置和放大/缩小。当要看窗口的全部内容时,可以将其放大到最大。
在非流水方式下,只有代码窗口、寄存器窗口、内存窗口和断点窗口。 1. 代码窗口
代码窗口给出内存中代码的列表,每条指令占一行,按地址顺序排列。每行有5列(当全部显示时):地址、断点标记、指令的机器码、流水段标记和符号指令。如图2.1所示。
图2.1 代码窗口
图中不同抹色的行代表相应的指令所处的执行段。黄色代表IF段,绿色代表ID段,红色代表EX段,青色代表MEM段,棕色代表WB段。
该窗口中各列的含义如下:
? 地址:以16进制的形式给出。内存是按字节寻址的,每条指令占4个字节。当采用
符号地址时,会在相应的位置给出汇编程序中出现的标号。
? 断点标记:如果在该指令处设有断点,则显示相应的标记。断点标记的形式为B.X
(X为段名),表示该断点是设置在该指令的“X”段。例如,若某行的断点标记为“B.EX”,则表示在该指令的EX段设置了断点。
当模拟器工作在非流水方式下时,断点的标记为B。
? 机器码:该行所对应的指令的十六进制机器码。若该行无指令,则仅仅显示4字节
数据;
? 流水段标记:表示当该指令正在执行时,它在当前周期该指令所处的流水段。当模
拟器工作在非流水方式下时,它没有意义。 ? 符号指令:机器代码所对应的符号指令。
在该窗口中选中某行(用鼠标左键单击),然后再点击鼠标右键,就会弹出菜单:设置断点,清除断点,它们分别用于在所选指令处设置断点和清除断点。
? 设置断点
选择(点击)要设断点的指令?点击右键?“设置断点”,弹出“设置断点”小对话框,在“段”的下拉框中选择断点所在的流水段(在非流水方式下,不存在该下拉框),单击“确定”即可。 ? 清除断点
选择(点击)指令?点击右键?“清除断点”,则设置在该指令处的断点被删除。
2. 寄存器窗口
寄存器窗口显示MIPSsim模拟器中的寄存器的内容。共有4组寄存器:通用寄存器、浮点寄存器、特殊寄存器和流水寄存器,分为4栏来显示。每一栏下分别有各自的数据格式选项,如图2.2所示。
图2.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. 流水线窗口
流水线窗口显示流水线在当前配置下的组成以及该流水线的各段在当前周期正在处理的指令。如图2.3所示。
非流水方式下,没有该窗口。
? ? ? ?
图2.3 流水线窗口
在该窗口中,每一个矩形方块代表一个流水段,它们用不同的颜色填充。在该窗口的左侧是IF到WB段,其右边为浮点部件。浮点部件分有浮点加法部件(fadd)、浮点乘法部件(fmul)和浮点除法部件(fdiv)三种。在菜单“配置”?“常规配置”中修改浮点部件个数,可看到该窗口中对应类型的浮点部件个数会发生相应的变化。
在运行过程中,各段的矩形方块中会显示该段正在处理的指令及其地址(16进制)。当双击某矩形方块时,会弹出窗口显示该段出口处的流水寄存器的内容(16进制)。
4. 时钟周期图窗口
该窗口用于显示程序执行的时间关系,画出各条指令执行时所用的时钟周期。非流水方式下,没有该窗口。
以窗口左上为原点,横轴正方向指向右方,表示模拟器先后经过的各个周期(列),纵轴正方向指向下方,表示模拟器中先后执行的各条指令(行)。如图2.4所示。
图2.4 时钟周期图窗口
横坐标有相对周期计数和绝对周期计数两种不同的表示形式。在默认的绝对周期计数下,按0、1、2、? 依次递增的顺序计数。而在相对周期计数下,当前周期记为第0个周期,而其余周期(在左边)则按其相对于当前周期的位置,分别记为-1,-2,-3,?等。
在由指令轴和周期轴组成的二维空间下,坐标(n, i)对应的矩形区域表示指令i在第n+1周期时所经过的流水段(假设采用绝对周期计数)。
双击某行时,会弹出一个小窗口,显示该指令在各流水段所进行的处理。
该窗口中还显示定向的情况。这是用箭头来表示的。若在第m周期和第m+1周期间产生从指令i1到指令i2的定向,则在坐标(m, i1)和(m+1, i2)表示的矩形区域之间会有一个箭头。
5. 内存窗口
该窗口显示模拟器内存中的内容,左侧一栏为十六进制地址,右侧为数据,如图2.5所示。可以直接通过双击来修改其内容。这时会弹出一个“内存修改”对话框,如图2.6所示。对话框的上部区域为数据类型与格式选择区,通过勾选其中的一项,就可以指定所采用的数据类型与格式。