微机原理实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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进制)

点击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 [00400070] 0810000c j 0x00400030 [loop] [00400074] 3402000a ori $2, $0, 10 [00400078] 0000000c syscall [80000180] 0001d821 addu $27, $0, $1 [80000184] 3c019000 lui $1, -28672 [80000188] ac220200 sw $2, 512($1) [8000018c] 3c019000 lui $1, -28672 [80000190] ac240204 sw $4, 516($1) [80000194] 401a6800 mfc0 $26, $13 [80000198] 001a2082 srl $4, $26, 2

相关文档
最新文档