微机原理实验报告材料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理实验报告实验名称:MIPS汇编程序设计
院系:电信学院
班级:
:
指导老师:
一、实验目的:
1.熟悉MIPS汇编程序开发环境,学习使用Qtstim工具。知道如何查看存空间分配。
2. 了解C语言语句与汇编指令之间的关系。
3. 掌握MIPS汇编程序设计,掌握QTSPIM的调试技术。
4. 了解MIPS汇编语言与机器语言之间的对应关系。
5. 熟悉常见的MIPS汇编指令
6. 掌握程序的存映像。
二、实验容
1.用汇编程序实现以下伪代码:要求使用移位指令实现乘除法运算。Int main ()
{
Int K,Y;
Int Z[50];
Y=56;
For(k=0;k<50;K++) Z[k]=Y-16*(k/4+210); }
三、程序设计及分析
1.C 语言分析:
有两个变量是int 型,一个数组型;还有一个循环执行过程。 2.汇编程序实现分析:
首先需要定义用户数据段,获得一个存空间作为数组空间。再选定几个寄存器作为K ,Y 以及输出,其中输出输出和Y 可以合用一个寄存器。 3.设计思路:
分配完空间地址后,最重要的是完成循环控制。循环控制有两个思路:可以是先判断后循环;或者是先循环后判断 即如图
否
是
是 slti $t2,$t0,50 #判断k 是否于50
beq $t2,$t3($t2=1循环,否则结束。)
四、程序实现及调试分析
1.
汇编程序代码实现:
方法一
.data #定义用户数据段
z:.space 200 #数组为int型,大小为50,所以占存4*50 str:.asciiz " "#输出结果之间的空隙
.text
main:
la $s0,z #$s0 #为数组在z[]
li $t0,0 #$s1 #代表k计数,初始值为0
li $t1,56 #$t2 #代表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]
li $v0,1 #输出
addi $a0,$s0,0
syscall
li $v0,4 #输出间隔
la $a0,str
syscall
addi $s0,$s0,4 #地址移一位
addi $t0,$t0,1 #k加1
j loop #循环
done:
li $v0,10
syscall
2.调试过程
1.编写程序:详细见代码
2.装载程序
选择file,选择Reinitialize and Load File,把写好的文件导入QtSpim。
3.如果没有错误,便运行。点击上图的小三角
运行之后点击不同的窗口便可得到我们想要的结果。具体详细结果如下图
存占用情况映像
分析:由图可知数组地址从0Xfffff318—0Xfffff258;每行有四个是一样的,总共50个地址。这是因为数组含有50个元素,而int型数据占4个字节空间,字对齐方式,所以连续四个地址是相同的
而且有上表也可以得出Qpstim仿真器是按大字节序
数据段存映像
表格如下(数值都采用16进制)
存地址(16进制)变量
名
值存地址(16
进制)
变量
名
值
fffff318 Z[0] 26850099
2 fffff2b8 Z[25] 2685010
92
fffff318 Z[1] 26850099fffff2b8 Z[26] 2685010
点击Window选择console得下图
运行结果显示
代码段存映像
地址机器码汇编指令[00400014] 0c100009 jal 0x00400024 [main] [00400018] 00000000 nop
[0040001c] 3402000a ori $2, $0, 10 [00400020] 0000000c syscall [00400024] 3c101001 lui $16, 4097 [z] [00400028] 34080000 ori $8, $0, 0 [0040002c] 34090038 ori $9, $0, 56
[00400030] 290a0032 slti $10, $8, 50
[00400034] 11400010 beq $10, $0, 64 [done-0x00400034] [00400038] 00085882 srl $11, $8, 2
[0040003c] 216b00d2 addi $11, $11, 210 [00400040] 000b5900 sll $11, $11, 4
[00400044] 012b5822 sub $11, $9, $11
[00400048] ae0b0000 sw $11, 0($16)
[0040004c] 34020001 ori $2, $0, 1
[00400050] 22040000 addi $4, $16, 0
[00400054] 0000000c syscall
[00400058] 34020004 ori $2, $0, 4
地址机器码汇编指令
[0040005c] 3c011001 lui $1, 4097 [str]
[00400060] 342400c8 ori $4, $1, 200 [str] [00400064] 0000000c syscall
[00400068] 22100004 addi $16, $16, 4
[0040006c] 21080001 addi $8, $8, 1