MIPS汇编程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验报告MIPS汇编程序设计
院系:电子信息与通信学院
班级:电信卓越1201班
姓名:钟远维
学号:U201213500
一.实验目的
1. 掌握QTSPIM的调试技术
2. 了解MIPS汇编语言与机器语言之间的对应关系
3. 掌握MIPS汇编程序设计
4. 了解C语言语句与汇编指令之间的关系
5. 熟悉常见的MIPS汇编指令
6. 掌握程序的内存映像
二.实验任务
用汇编程序实现以下伪代码:要求采用移位指令实现乘除法运算。
int main()
{ int K, Y ;
int Z[50] ;
Y = 56;
for(k=0;k<50;k++)
Z[K] = Y - 16 * ( K / 4 + 210) ;
}
三.汇编源程序设计
1.算法设计
.data
#定义用户数据段
Z:.space 200
.text
#定义用户程序段
main:
#给K,Y分配寄存器并赋初值
#给数组Z[K]分配寄存器
#计算Y - 16 * ( K / 4 + 210) 并将结果存入一个寄存器
#将上述寄存器中的结果写入Z[K]
done:
li $v0,10
syscall
2.源程序代码
.data #定义用户数据段
z: .space 200
.text
main:
la $s0,z #$s0=addrz
li $t0,0 #$s1=k=0
li $t1,56 #$s2=y=56
loop:
slti $t2,$t0,50 #判断k是否于50
beq $t2,$0,done #当k大于等于50,跳转
srl $t3,$t0,2 #k/4
addi $t3,$t3,210 #k/4+210
sll $t3,$t3,4 #16*(k/4+210)
sub $t3,$t1,$t3 #y-16*(k/4+210)
sw $t3,0($s0) #写进z[k]
addi $s0,$s0,4 #地址移一位
addi $t0,$t0,1 #k加1
j loop #循环
done:
li $v0 10
syscall
四.源代码调试过程
1.装载程序。
点击file,选择Reinitialize and Load File,把写好的文件导入QtSpim。
2.点击“运行”,如图:
3.得到实验结果如下:
数据段映像:
仿真器在真正的用户代码段内增加了部分代码以实现程序运行控制,该仿真器中所有用户代码都必须存储在地址为0x00400000~0x00440000的范围之内。用户代码段将每一行代码的地址,及其对应的机器码都显示给用户,为方便查看,还给出了反汇编得到的汇编指令,而且在注释中显示了用户编写的源代码。通过地址部分信息,我们知道每一行代码的地址都是前一行代码地址+4,即PC+4,机器指令,例如
[00400044] 012b5822 sub $11, $9, $11 ; 14: sub $t3,$t1,$t3
其中的机器码012b5822=000000 01001 01011 01011 00000 100010B。第一段六位和第六段六位分别为000000B和100010B表示该指令的功能为sub 指令,第二段5位为01001B表示第一个源操作数寄存器的编号($t1的编号为9),第三段5位为01011B表示第二个源操作数寄存器的编号($t3的编号为11),第四段5位为01011B表示目的操作数的寄存器编号($t3的编号为11),反汇编得到的汇编指令也很明显地指出了这些数据代表的意义;第五段在这条指令中没有意义。
其他行数据所表达的意义以此类推同样可以得到。
Z[k]数据内存映像:
整理成表格形式如下:
可以看到Z[K]的首地址为10010000,且每个内存中的四个数值都是一样的,且随着地址规律地增加,数值在规律地递减。
五.实验总结
通过本次MIPS汇编程序设计的实验,我再次巩固了理论课所学习的程序代码的编写及书写规范,并将其付诸于实践。
同时,我也基本掌握了Qtspim软件的应用和程序的调试工作,并更深刻地理解了汇编语言中机器指令的执行方法,对以后的学习定会有莫大的帮助。
代码的编写过程,关键是先整理编写的思路,然后根据课本上的代码指令编写程序。编译过程中,当然会遇到一些困难,但是通过思考和与老师同学的交流,都轻松解决了。
总的来说,本次实验做得还比较轻松,原理方面容易掌握,操作方面也容易实验。望以后的实验也一样顺利。