了解和熟悉指令级模拟器MIPSsim的操作和使用方法;
熟悉MIPS体系结构;
熟悉MIPS指令系统及其特点,加深对MIPS指令操作语义的理解。
实验平台采用指令级和流水线操作级模拟器MIPSsim(64位)。
简要阅读课件第2章的“2.6节MIPS指令系统结构”;
阅读“MIPSsim使用手册.pdf”(流水寄存器部分无需看),了解MIPSsim模拟器的使用方法;
实验时参照“MIPS指令列表.pdf”查用到的指令的含义。
这条命令将寄存器r0中的值(值为0)加上124,然后赋给寄存器r8。
可以看到,通用寄存器r8的值现在为124。
PC的值为下一条要执行的指令的地址0x00..0004。
这条命令将寄存器r8内的值与偏移量0加起来(值为124,对应十六进制为7C),作为地址对应到内存中,找到这一地址中存放的值(取8位),并将其存放至寄存器r1中。
我们可以看到,在内存0x00..007C中,存储着0x80。
查看r1中的值,为带符号数。
PC指向下一条指令。
这条命令将寄存器r8内的值与偏移量0加起来(值为124,对应十六进制为7C),作为地址对应到内存中,找到这一地址中存放的值(取32位),并将其存放至寄存器r1中。
我们可以看到,在内存0x00..007C中,存储着0x00000080。
查看r1中的值。
PC指向下一条指令。
这条命令将寄存器r8内的值与偏移量0加起来(值为124,对应十六进制为7C),作为地址对应到内存中,找到这一地址中存放的值(取8位无符号),并将其存放至寄存器r1中。
我们可以看到,在内存0x00..007C中,存储着0x80。
查看r1中的值,为无符号数。
PC指向下一条指令。
这条命令将寄存器r0中的值(值为0)加上128,然后赋给寄存器r8。
可以看到,通用寄存器r8的值现在为128。
PC的值为下一条要执行的指令的地址。
这条指令将r1的内容存入内存(存字),内存的地址为0+r8中的数值。
可以看到,r1中的数值为0x00000080,r8中的数值为0x0080。
所以,这条指令将0x00000080存储到地址为0x0080的内存中。
PC的值为下一条要执行的指令的地址。
这条指令表示,如果r0寄存器的值与r0中的相同,则跳转到PROG2标志所指向的指令。
PC的值为下一条要执行的指令的地址。
这条指令将寄存器r1与r2的值相加,并存储至r3中(双字)。
可以看到,r1中的值0x0000000000000080与r2中的0相加,并放入了r3之中。
PC的值为下一条要执行的指令的地址。
该命令将寄存器r1与r2中的值相乘,并将乘积的低64位送入LO,高64位送入HI(有符号)。
可以看到128与0的乘积为0。
LO与HI中的值即为0,PC的值为下一条要执行的指令的地址。
这条指令表示,如果r0寄存器的值与r0中的相同,则跳转到PROG3标志所指向的指令。
PC的值为下一条要执行的指令的地址。
这条指令将寄存器r1与r2之中的值相与,并将结果存储至r3中。
可以看到,r1与r2中的值相与的结果为0,所以r3之中的结果为0。
PC的值为下一条要执行的指令的地址。
这条指令将r1之中的值与立即值0相与(结果为0),并将结果放至r3中。
可以看到,r3之中的值为0。
PC的值为下一条要执行的指令的地址。
这条指令表示,如果r0寄存器的值与r0中的相同,则跳转到PROG4标志所指向的指令。
PC的值为下一条要执行的指令的地址。
这条指令表示,如果r1寄存器的值与r2中的相同,则以2作为相对于PC + 4的偏移量进行转移。
显然,寄存器r1与r2之中的值并不相等,所以不发生转移。
PC的值为下一条要执行的指令的地址。
这条指令将r0中的低32位进行逻辑左移(左移0位),结果按符号位扩展,然后放入r0。
R0移位之前值为0,移位之后,值还为0。
PC的值为下一条要执行的指令的地址。
执行过程与15.SLL $r0, $r0, 0相似。
这条指令表示,如果寄存器r1中的值大于等于0,则由16位带符号偏移量0x0000000000000010左移两位后和PC(PC值为4C+4等于50)相加,得0x00000058。
可以看到,r1的值为0x00080,大于0,所以进行转移。
PC的值为下一条要执行的指令的地址。
当r1之中的值大于等于0时,由16位带符号偏移量0x0000000000000010左移两位后和PC(PC值为58+4等于5C)相加,得0x00000064,并当前PC值(0x00005C)保存到r31。
可以看到,r1的值为0x00080,大于0,所以进行操作。
可以看到,r31中保存的值为5C。
PC的值为下一条要执行的指令的地址。
这条命令将寄存器r0中的值(值为0)加上116,然后赋给寄存器r1。
可以看到,通用寄存器r1的值现在为116。
PC的值为下一条要执行的指令的地址。
无条件转移到寄存器r1给出的地址,并将返回地址保存到r3中。
可以看到,r1和PC寄存器的值为0x00000074。
R3寄存器的值为0x0000006C。
执行到这句指令时,程序执行中止。
-------------------------------------------------------------------------------------------------------
最后一点碎碎念:如果各位有发现本文有哪处有误或理解不当的地方,敬请指正。