实验 MIPS 指令系统和 MIPS 体系结构
一、实验目的
-
了解和熟悉指令级模拟器。
-
熟练掌握 MIPSsim 模拟器的操作和使用方法。
-
熟悉 MIPS 指令系统及其特点,加深对 MIPS 指令操作语义的理解。
-
熟悉 MIPS 体系结构。
二、实验平台
实验平台采用指令级和流水线操作级模拟器 MIPSsim。
三、实验内容和步骤
首先要阅读 MIPSsim 模拟器的使用方法(见附录),然后了解 MIPSsim 的指令系统和汇编语言。
-
启动 MIPSsim(用鼠标双击 MIPSsim 模拟器(64 位).exe)。
-
选择“配置”—>“流水方式”选项,使模拟器工作在非流水方式下。
-
参照 MIPSsim 使用说明,熟悉 MIPSsim 模拟器的操作和使用方法。
-
以 alltest.s 为例,分析汇编代码并填写excel 表(附件)
-
载入样例程序 alltest.s(在本模拟器所在的文件夹下的“样例程序”文件夹中),然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序,观察程序执行情况,观察 CPU 中寄存器和存储器的内容的变化,验证分析是否正确
四、 回答以下问题:
模拟器中内存是小端存储还是大端存储,为什么?
答:小端存储。
以alltest.s中的【BUFFER:.word 300】为例。300 = 012C H,而在内存中可以发现,80H内存单元存储了2C,而81H内存单元存储了01,如下图所示。
即数据的低位优先存储在低地址中,符合小端存储的特性。而大端存储的特性是数据的高位优先存储在低地址中。
两种存储方式的存放顺序如下图所示: 图片来源:
第七课:大端存储和小端存储
模拟器中alltest 的代码AddIU $r8,$r0,Data 为什么编译为AddIU $r8,$r0,124 ? ADDIU $r8, $r0, BUFFER 编译为 ADDIU $r8, $r0, 128 ?
答:
DATA所存放的地址是0x0000 007C,7C H = 124。BUFFER所存放的地址是0x0000 0080,80H = 128。具体地址如下图所示: ADDIU指令为无符号立即值加的指令,功能是rt ← rs + immediate。但是由于DATA和BUFFER是汇编程序中的标签,而不是具体的数值,所以编译器会将标签解析为它们在数据段.data中的地址,即124和128。
图片来源:附录B:MIPS使用手册/附录B-MIPS64指令格式和功能
执行到后 LB $R1, 0($R8) R1 的值为什么是-128,而 LW $R1, 0($R8)时为 128? LBU $r1, 0($r8)为 128?
答:
LB指令为取字节的指令,且按有符号数操作,功能是rt ← memory[base + offset]。在LB r 1 , 0 ( r1,0( r1,0(r8)中,将r8寄存器中1个字节的内容以有符号数的形式取到r1寄存器中,即1000 0000 B,是一个负数,因此r1的值是-128。
LW指令为取字的指令,且按有符号数操作,功能是rt ← memory[base + offset]。在LW r 1 , 0 ( r1,0( r1,0(r8)中,将r8寄存器中1个字的内容以有符号数的形式取到r1寄存器中,由于64位计算机中1个字是8个字节,即0000 …… 1000 0000 B(共64位),是一个正数,因此r1的值是128。
LBU指令为取无符号字节的指令,功能是rt ← memory[base + offset]。在LBU r 1 , 0 ( r1,0( r1,0(r8)中,将r8寄存器中1个字节的内容以无符号数的形式取到r1寄存器中,即1000 0000 B,是一个正数,因此r1的值是128。
无符号数 80H 对应的十进制数为()A . 96 B . 80 C . -128 D . 128
答: 无符号数80H(十六进制)转换为十进制是128。因此,正确答案是D. 128。
五、补充
按照以上步骤运行并观察 branch.s 的模拟结果,对实验结果进行分析。
对branch.s的汇编代码分析已经附在excel表中。
六、实验注意
需要阅读附录A-MIPS64指令列表和附录B-MIPS64指令格式和功能,才能在完成实验时理解指令含义。
excel表部分截图
实验结束
点赞关注收藏,获取更多干货知识~