计算机组成原理实验2 MIPS 指令系统

  • 实验要求

通过在 MARS 模拟器上运行和调试汇编程序,掌握 MIPS 指令系统计算机运行原理。

  1. 熟悉并掌握MARS软件
  2. 编写并执行MIPS程序
  3. 了解 MIPS 对过程调用的支持,掌握指令的寻址方式

  • 实验结果与分析
    1. 熟悉并站务MARS软件

计算机组成原理实验2 MIPS 指令系统_第1张图片

 

图表 1运行完成截图

    1. 程序代码中“.data”“.word”“.text”关键字的含义

 

图表 2MARS软件help中指令描述

“.data”表示以下是初始化数据段,变量声明后,即在主存中分配空间。

 

图表 3MARS软件help中指令描述

“.text”表示接下来是代码段,即各项指令操作,程序入口为“main”。

 

图表 4MARS软件help中指令描述

“.word”定义一个字,并为它分配空间,用于数据声明。例如,“var1:       .word     3”声明一个 word  类型的变量 var1 , 同时给其赋值为 3 。

    1. MARS程序中的断点

在Execute界面左侧Bkpt 属性下可勾选以添加断点,在程序15 行添加断点并运行,如下图所示。

计算机组成原理实验2 MIPS 指令系统_第2张图片

 

图表 5程序添加断点后运行截图

    1. 再次点击运行即可继续执行后续代码

计算机组成原理实验2 MIPS 指令系统_第3张图片

 

图表 6继续执行后续代码

    1. 寄存器内容查看与修改

计算机组成原理实验2 MIPS 指令系统_第4张图片

 

图表 7在界面右端可查看与修改寄存器内容

    1. 变量n 保存位置,计算第13 个Fibonacci

变量n 保存位置为$t5 ,由程序可知,$t5 从变量size 的地址访问了size 值。

计算机组成原理实验2 MIPS 指令系统_第5张图片

 

图表 8把n 设置为13 后寄存器数值截图

计算机组成原理实验2 MIPS 指令系统_第6张图片

图表 9运行结束后输出13个Fibonacci

 

    1. 代码中syscall 指令的作用

计算机组成原理实验2 MIPS 指令系统_第7张图片

 

图表 10syscall (1)

      此处syscall 的位置在输出运算结果之后,作用是声明程序结束。

计算机组成原理实验2 MIPS 指令系统_第8张图片

 

图表 11syscall (2)

      此处位于print 函数的末尾,作用是通过系统调用实现终端输出字符串head

计算机组成原理实验2 MIPS 指令系统_第9张图片

 

图表 12syscall (3)和syscall (4)

      这两处的syscall 用于循环输出Fibonacci 数列,第一个syscall 通过系统调用实现终端输出Fibonacci 数,之后一个syscall 实现终端输出空格分隔每个Fibonacci 数,最终实现如图表1 (或9 )的结果输出。

    1. 编写并执行 MIPS 程序

代码如下

       .data

num1: .word 1

num2: .word 0

       .text

       la $s0, num1

       la $s1, num2

       lw $s0, 0($s0)

       lw $s1, 0($s1)

       move $t0, $s0

       move $t1, $s1

       xor $t2, $t1, $t0

       xor $t3, $t2, $t1

       xor $t4, $t3, $t2

       xor $t5, $t4, $t3

       xor $t6, $t5, $t4

       xor $t7, $t6, $t5

       move $a0, $t7

       li $v0, 1

       syscall

       li   $v0, 10

   syscall

计算机组成原理实验2 MIPS 指令系统_第10张图片

 

图表 13程序运行结束(寄存器内容)截图

    1. 了解MIPS对过程调用的支持,掌握指令的寻址方式

计算机组成原理实验2 MIPS 指令系统_第11张图片

 

图表 14运行结果截图

            1. 每行汇编指令添加注释,解释其在求解阶乘中的作用

如下图所示

计算机组成原理实验2 MIPS 指令系统_第12张图片

 

图表 15源代码及注释

            1. 给出第一次运行到第 25 行代码时,栈顶位置和栈内存储的内容,并对每项内容给出解释

计算机组成原理实验2 MIPS 指令系统_第13张图片

 

图表 16第一次运行到25行代码时栈顶位置和栈内存储的内容

其中栈顶位置在2147479524,指向数值1 ,在此位置的原因是最后一次跳转到fact时栈顶阶乘乘数为0,判断后进行了出栈操作。栈内存储内容分别为在第三次跳转并链接到fact时入栈的阶乘乘数1 ,第25行指令地址4194384,第二次跳转并链接到fact时入栈的阶乘乘数2 ,第25行指令地址4194384,第一次跳转并链接到fact时入栈的阶乘乘数3 ,第9行指令地址4194324。

            1. 在第 19 行代码第一次跳转时,给出该行代码对应的机器语言(即二进制代码);给出该机器语言中对应 L1 的立即数,并解释为什么是该立即数

 

图表 17第19行代码第一次跳转

机器语言:0x11000003,对应二进制代码0b 0001 0001 0000 0000 0000 0000 0000 0011

对应L1地址的立即数为0x00400048,因为beq指令为pc相对寻址方式,机器语言中跳转指令的相对位置为3条指令,且当前地址为0x00400038故对应L1地址的立即数为0x00400038+(1+3)*4 = 0x00400048。

  • 实验小结

MIPS指令直接对计算机硬件操作,在使用时需要考虑直接作用于寄存器的操作,编写一个MIPS程序要比直接用高级语言编写更加困难。经过本次实验,拓宽了我对计算机知识的认知,我觉得计算机理所应当的具备功能,却很难知晓相应的汇编指令是什么。我想学习汇编语言的作用就是让我知其然所以然,能够更加透彻地认知信息世界。

你可能感兴趣的:(计算机组成原理,开发语言)