网站推广公司运营模式,零食网站色调搭配怎麽做,杭州服装网站建设,中文外贸网站有哪些实验2#xff1a;MIPS指令系统
一#xff1a;实验目的
了解和熟悉指令级模拟器。熟练掌握MIPSsim模拟器的操作和使用方法。熟悉MIPS指令系统及其特点#xff0c;加深对MIPS指令操作语义的理解。熟悉MIPS体系结构。 二#xff1a;实验要求
采用指令集和流水线操作级模拟器…实验2MIPS指令系统
一实验目的
了解和熟悉指令级模拟器。熟练掌握MIPSsim模拟器的操作和使用方法。熟悉MIPS指令系统及其特点加深对MIPS指令操作语义的理解。熟悉MIPS体系结构。 二实验要求
采用指令集和流水线操作级模拟器MIPSsim作为实验平台。 三实验步骤
阅读MIPSsim模拟器的使用方法了解MIPSsim的指令系统和汇编语言。启动MIPSsim用鼠标双击MIPSsim模拟器(64位).exe。选择“配置”——“流水方式”选项使模拟器工作在非流水方式下。参照MIPSsim使用说明熟悉MIPSsim模拟器的操作和使用方法。以alltest.s为例分析汇编代码并填写实验表格。载入在本模拟器所在的文件夹下的“样例程序”文件夹中的样例程序alltest.s然后分别以单步执行一条指令、执行多条指令、连续执行、设置断点等的方式运行程序观察程序执行情况观察CPU中寄存器和存储器的内容的变化验证分析是否正确。按照以上步骤运行并观察branch.s的模拟结果对实验结果进行分析。 四实验结果
【1】alltest.s实验表格
如excel文件中的sheet1所示。 【2】branch.s实验表格
如excel文件中的sheet2所示。 【3】回答问题
·模拟器中内存是小端存储还是大端存储为什么
小端存储。
以alltest.s中的【BUFFER:.word 300】为例。300 012C H而在内存中可以发现80H内存单元存储了2C而81H内存单元存储了01如下图所示。即数据的低位优先存储在低地址中符合小端存储的特性。 而大端存储的特性是数据的高位优先存储在低地址中。两种存储方式的存放顺序如下图所示。 ·模拟器中alltest的代码ADDIU $r8,$r0,DATA 为什么编译为ADDIU $r8,$r0,124ADDIU $r8,$r0,BUFFER编译为ADDIU $r8,$r0,128
DATA所存放的地址是0x0000 007C7C H 124。BUFFER所存放的地址是0x0000 008080H 128。具体地址如下图所示。 ADDIU指令为无符号立即值加的指令功能是rt ← rs immediate。但是由于DATA和BUFFER是汇编程序中的标签而不是具体的数值所以编译器会将标签解析为它们在数据段.data中的地址即124和128。 ·执行到LB $r1,0($r8)时R1的值为什么是-128而LW $r1,0($r8)时为128LBU $r1,0($r8)时为128
LB指令为取字节的指令且按有符号数操作功能是rt ← memory[base offset]。在LB $r1,0($r8)中将r8寄存器中1个字节的内容以有符号数的形式取到r1寄存器中即1000 0000 B是一个负数因此r1的值是-128。
LW指令为取字的指令且按有符号数操作功能是rt ← memory[base offset]。在LW $r1,0($r8)中将r8寄存器中1个字的内容以有符号数的形式取到r1寄存器中由于64位计算机中1个字是8个字节即0000 …… 1000 0000 B共64位是一个正数因此r1的值是128。
LBU指令为取无符号字节的指令功能是rt ← memory[base offset]。在LBU $r1,0($r8)中将r8寄存器中1个字节的内容以无符号数的形式取到r1寄存器中即1000 0000 B是一个正数因此r1的值是128。
上述取指令的具体描述如下图所示。 ·无符号数80H对应的十进制数为D
A.96 B.80 C.-128 D.128
80 H 1000 0000 B
当80H表示无符号数时所有位均是数位即结果是2^7 128。
当80H表示有符号数时最高位是符号位其余位是数位。当符号位等于1时表示负数当符号位等于0时表示正数。数位为000 0000且表示负数那么可以分析出它是表示范围内的最小负数而不是0因为0的补码是唯一的。即结果是-128。 五实验总结和分析
【1】空指令NOP
在本次实验的汇编程序中有多行指令使用了空指令NOP。NOP在模拟器中编译后为SLL $r0,$r0,0。SLL指令是按立即值逻辑左移的指令上述代码的含义为将r0寄存器中的低32位进行逻辑左移移动的位数是立即值0结果按符号位扩展然后放入r0寄存器中。执行该指令后模拟器会保持r0寄存器中的值不变即实际上是一个空操作只是对PC的值进行了改变。
在本次实验中NOP指令前面伴有分支指令例如BEQ指令等。通过在分支指令后加入NOP指令可以观察到执行分支指令时的PC变化情况进而判断分支指令所执行的分支内容。具体而言如果PC指向下一条NOP指令的地址则表示分支内容为条件不成立后的结果如果PC指向的不是下一条NOP指令的地址则表示分支内容为条件成立后的结果。
【2】循环嵌套 在本次实验中branch.s汇编程序采用了loop循环其中包含一段BGTZ $r5,loop指令。BGTZ指令是大于0转移的指令上述代码的含义为如果r5寄存器中的值大于0则继续loop循环否则退出loop循环。这与高级语言中的循环结束的判断条件相似。
【3】自陷指令
在本实验中alltest.s汇编程序在Label4处采用了TEQ $r0, $r0。TEQ指令是等于自陷的指令上述代码的含义为如果r0寄存器中的值等于r0寄存器中的值则陷入陷阱中。在alltest.s中如果执行到该指令则表示程序运行完毕应该结束程序。
其他自陷指令的具体描述如下图所示。 【4】跳转指令 在本实验中alltest.s汇编程序在Label3处采用了JALR $r3, $r1。JALR指令是寄存器跳转并链接的指令上述代码的含义为无条件转移到r1寄存器所给出的地址并将返回地址PC4保存到r31寄存器中。 其他跳转指令的具体描述如下图所示。 【5】分支指令 在本实验中alltest.s汇编程序在多处位置采用了分支指令用于判断转移。如果符合分支指令的条件则跳转到某个程序标签处否则执行下一条指令。 跳转指令的具体描述如下图所示。 【6】内存空间变化的情况
在本实验中只有SW指令会触发内存空间的变化。SW指令是存字指令其功能为memory[base offset] ← rt。 其他存指令的具体描述如下图所示。 六实验意见和建议
首先需要熟悉插件的使用阅读附件的操作手册。其次需要熟悉MIPS指令的功能以及汇编代码中所对应的寄存器。最后需要了解PC程序计数器的作用是指向下一条需要执行的指令对指令的执行过程进行合理的分析。 七附件
【1】alltest.s源文件 # load和store指令 .text main: ADDIU $r8, $r0, DATA LB $r1, 0($r8) LW $r1, 0($r8) LBU $r1, 0($r8) ADDIU $r8, $r0, BUFFER SW $r1,0($r8) BEQ $r0, $r0, PROG2 NOP # 算术运算指令 PROG2: DADD $r3, $r1, $r2 DMULT $r1, $r2 BEQ $r0, $r0, PROG3 NOP # 逻辑运算指令 PROG3: AND $r3, $r1, $r2 ANDI $r3, $r1,0xFFFF0000 BEQ $r0, $r0, PROG4 NOP # 控制转移指令 PROG4: BEQ $r1,$r2,LABEL1 NOP NOP LABEL1: BGEZ $r1,LABEL2 NOP NOP LABEL2: BGEZAL $r1,LABEL3 NOP NOP LABEL3: ADDIU $r1, $r0, LABEL4 JALR $r3, $r1 NOP NOP LABEL4: TEQ $r0, $r0 NOP # 数据 .data .align 2 DATA: .word 128 BUFFER: .word 300
【2】branch.s源文件 .text main: ADDI $r2,$r0,1024 ADD $r3,$r0,$r0 ADDI $r4,$r0,8 loop: LW $r1,0($r2) ADDI $r1,$r1,1 SW $r1,0($r2) ADDI $r3,$r3,4 SUB $r5,$r4,$r3 BGTZ $r5,loop ADD $r7,$r0,$r6 TEQ $r0,$r0