微机原理实验报告

  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);

}

三、程序设计及分析

语言分析:

有两个变量是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] ori $8, $0, 0

[0040002c] ori $9, $0, 56

[00400030] 290a0032 slti $10, $8, 50

[00400034] 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] ori $2, $0, 1

[00400050] addi $4, $16, 0

[00400054] 0000000c syscall

[00400058] ori $2, $0, 4

地址机器码汇编指令

[0040005c] 3c011001 lui $1, 4097 [str]

相关文档
最新文档