当前位置:文档之家› mips微机原理实验报告

mips微机原理实验报告

一、实验目的
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.完成汇编语言程序设计、调试、测试全过程
2.指出用户程序的内存映像,包括代码段和数据段
3.完成软件实验报告
四,实验思路
初始化:
在.data里声明一个长度为200的空间勇于存储Z数组,取得Z数组的地址,认为寄存器$s1,$s2分别存储k的值和y的值,对k和y的操作直接改变寄存器的值,$s0存储Z数组的地址。

计算:
根据题目所提供的算式一步一步计算,所得中间结果寄存在寄存器$t0中。

针对乘除法由于乘数和除数都是2的整数指数幂函数倍,所以分别采用左移(sll)和右移(srl)来计算。

存储:
每次计算完算式的答案后用sw命令将答案存储在内存中的对应地址处
自增:
每一次计算后k自动增1,$s0寄存器存储的相应Z数组地址加4
跳转判断:
如果k大于等于50,则跳到exit处结束程序,如果k小于50则利用j命令重新开始一轮计算
退出:
利用 li $v0,10 和 syscall 结束整个程序
五、实验过程
程序源代码:
.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,reinitializeandloadfile
2.运行程序:选择runandcontinue
2.观察程序运行结果
六.代码段内存映像
[00400024] 3c101001 lui $16, 4097 [z]; 5: la $s0,z [00400028] 34080000 ori $8, $0, 0; 6: li $t0,0 [0040002c] 34090038 ori $9, $0, 56; 7: li $t1,56 [00400030] 290a0032 slti $10, $8, 50; 9: slti $t2,$t0,50 [00400034] 11400009 beq $10, $0, 36 [done-0x00400034]
[00400038] 00085882 srl $11, $8, 2; 11: srl $t3,$t0,2 [0040003c] 216b00d2 addi $11, $11, 210; 12: addi $t3,$t3,210 [00400040] 000b5900 sll $11, $11, 4; 13: sll $t3,$t3,4 [00400044] 012b5822 sub $11, $9, $11; 14: sub $t3,$t1,$t3 [00400048] ae0b0000 sw $11, 0($16); 15: sw $t3,0($s0) [0040004c] 22100004 addi $16, $16, 4; 16: addi $s0,$s0,4 [00400050] 21080001 addi $8, $8, 1; 17: addi $t0,$t0,1 [00400054] 0810000c j 0x00400030 [loop]; 18: j loop [00400058] 3402000a ori $2, $0, 10; 20: li $v0 10 [0040005c] 0000000c syscall; 21: syscall
七.数据段内存映像
[10010000] fffff318 fffff318 fffff318 fffff318 [10010010] fffff308 fffff308 fffff308 fffff308
[10010020] fffff2f8 fffff2f8 fffff2f8 fffff2f8
[10010030] fffff2e8 fffff2e8 fffff2e8 fffff2e8 [10010040] fffff2d8 fffff2d8 fffff2d8 fffff2d8
[10010050] fffff2c8 fffff2c8 fffff2c8 fffff2c8
[10010060] fffff2b8 fffff2b8 fffff2b8 fffff2b8
[10010070] fffff2a8 fffff2a8 fffff2a8 fffff2a8
[10010080] fffff298 fffff298 fffff298 fffff298
[10010090] fffff288 fffff288 fffff288 fffff288
[100100a0] fffff278 fffff278 fffff278 fffff278
[100100b0] fffff268 fffff268 fffff268 fffff268 [100100c0] fffff258 fffff258
八、实验总结
通过这次实验,加深了我对微机原理的理论学习和汇编代码的理解,练习了Qtspim软件的使用,对以后的学习有很大的帮助。

这次实验的内容相对比较简单,原理容易理解,编译的过程中遇到了一点困难,不过按照老师的方法解决了。

相关主题