微机原理实验报告Word文档格式.docx

上传人:b****1 文档编号:4466670 上传时间:2023-05-03 格式:DOCX 页数:12 大小:84.82KB
下载 相关 举报
微机原理实验报告Word文档格式.docx_第1页
第1页 / 共12页
微机原理实验报告Word文档格式.docx_第2页
第2页 / 共12页
微机原理实验报告Word文档格式.docx_第3页
第3页 / 共12页
微机原理实验报告Word文档格式.docx_第4页
第4页 / 共12页
微机原理实验报告Word文档格式.docx_第5页
第5页 / 共12页
微机原理实验报告Word文档格式.docx_第6页
第6页 / 共12页
微机原理实验报告Word文档格式.docx_第7页
第7页 / 共12页
微机原理实验报告Word文档格式.docx_第8页
第8页 / 共12页
微机原理实验报告Word文档格式.docx_第9页
第9页 / 共12页
微机原理实验报告Word文档格式.docx_第10页
第10页 / 共12页
微机原理实验报告Word文档格式.docx_第11页
第11页 / 共12页
微机原理实验报告Word文档格式.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理实验报告Word文档格式.docx

《微机原理实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告Word文档格式.docx(12页珍藏版)》请在冰点文库上搜索。

微机原理实验报告Word文档格式.docx

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:

.space200#数组为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:

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

addi$s0,$s0,4#地址移一位

addi$t0,$t0,1#k加1

jloop#循环

done:

li$v0,10

2.调试过程

1.编写程序:

详细见代码

2.装载程序

选择file,选择ReinitializeandLoadFile,把写好的文件导入QtSpim。

3.如果没有错误,便运行。

点击上图的小三角

运行之后点击不同的窗口便可得到我们想要的结果。

具体详细结果如下图

内存占用情况映像

分析:

由图可知数组地址从0Xfffff318—0Xfffff258;

每行有四个是一样的,总共50个地址。

这是因为数组含有50个元素,而int型数据占4个字节空间,字对齐方式,所以连续四个地址是相同的

而且有上表也可以得出Qpstim仿真器是按大字节序

数据段内存映像

表格如下(数值都采用16进制)

内存地址(16进制)

变量名

fffff318

Z[0]

2

fffff2b8

Z[25]

Z[1]

6

Z[26]

Z[2]

Z[27]

Z[3]

4

fffff2a8

Z[28]

fffff308

Z[4]

8

Z[29]

Z[5]

Z[30]

Z[6]

Z[31]

Z[7]

fffff298

Z[32]

fffff2f8

Z[8]

Z[33]

Z[9]

Z[34]

Z[10]

Z[35]

Z[11]

fffff288

Z[36]

fffff2e8

Z[12]

Z[37]

Z[13]

Z[38]

Z[14]

Z[39]

Z[15]

fffff278

Z[40]

fffff2d8

Z[16]

Z[41]

Z[17]

Z[42]

Z[18]

Z[43]

Z[19]

fffff268

Z[44]

fffff2c8

Z[20]

Z[45]

Z[21]

Z[46]

Z[22]

Z[47]

Z[23]

fffff258

Z[48]

Z[24]

Z[49]

点击Window选择console得下图

运行结果显示

代码段内存映像

地址机器码汇编指令

[00400014]0c100009 

jal0x00400024[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 

[00400058] 

ori$2,$0,4 

[0040005c]3c011001 

lui$1,4097[str] 

[00400060]342400c8 

ori$4,$1,200[str] 

[00400064]0000000c 

syscall 

[00400068] 

addi$16,$16,4 

[0040006c] 

addi$8,$8,1 

[00400070]0810000c 

j0x00400030[loop] 

[00400074]3402000a 

 

[00400078]0000000c 

[]0001d821 

addu$27,$0,$1 

[]3c019000 

lui$1,-28672 

[]ac220200 

sw$2,512($1) 

[8000018c]3c019000 

[]ac240204 

sw$4,516($1) 

[]401a6800 

mfc0$26,$13 

[]001a2082 

srl$4,$26,2 

[8000019c]3084001f 

andi$4,$4,31 

[800001a0] 

[800001a4]3c049000 

lui$4,-28672[__m1_] 

[800001a8]0000000c 

[800001ac] 

[800001b0]001a2082 

srl$4,$26,2 

[800001b4]3084001f 

andi$4,$4,31 

[800001b8]0000000c 

[800001bc] 

[800001c0]3344003c 

andi$4,$26,60 

[800001c4]3c019000 

lui$1,-28672 

[800001c8]00240821 

addu$1,$1,$4 

[800001cc]8c240180 

lw$4,384($1) 

[800001d0]00000000 

[800001d4]0000000c 

[800001d8] 

ori$1,$0,24 

[800001dc]143a0008 

bne$1,$26,32[ok_pc-0x800001dc]

[800001e0]00000000 

[800001e4] 

mfc0$4,$14 

[800001e8] 

andi$4,$4,3 

[800001ec] 

beq$0,$4,16[ok_pc-0x800001ec]

[800001f0]00000000 

[800001f4]3402000a 

[800001f8]0000000c 

[800001fc] 

lui$1,-28672[__m2_] 

[]3424000d 

ori$4,$1,13[__m2_] 

[]0000000c 

[8000020c]001a2082 

[]3084001f 

[] 

bne$0,$4,8[ret-0x]

[]00000000 

[8000021c]401a7000 

mfc0$26,$14 

[]275a0004 

addiu$26,$26,4 

[]409a7000 

mtc0$26,$14 

[8000022c]8c220200 

lw$2,512($1) 

[]8c240204 

lw$4,516($1) 

[]001b0821 

addu$1,$0,$27 

[8000023c] 

mtc0$0,$13 

[]401a6000 

mfc0$26,$12 

[]375a0001 

ori$26,$26,1 

[]409a6000 

mtc0$26,$12 

[8000024c] 

eret 

仿真器在真正的用户代码段内增加了部分代码以实现程序运行控制,用户代码都必须存储在地址为0x00400000~0x00440000的范围之内。

用户代码段将每一行代码的地址,及其对应的机器码都显示给用户,为方便查看,还给出了反汇编得到的汇编指令,而且在注释中显示了用户编写的源代码。

通过地址部分信息,我们知道每一行代码的地址都是前一行代码地址+4,即PC+4,机器指令。

实验总结

1.本次试验让我对汇编程序的编写以及原理有力深刻的了解。

还有语法规范。

书写技巧,如何对书写的程序一目了然,层次清晰,还有养成多写注释习惯,既清晰自己的思路,还有助于别人的阅读。

2.由于汇编与C语言有较大的差别,所以刚开始编写非常不适应,编写程序不熟练,后面就好了一些。

首先要全局观,对各个寄存器所代表的意义要清晰;

还要对程序执行过程了如指掌,尤其是跳转部分,跳转条件,是相等跳转,还是不相等跳转,是先循环在判断还是先循环后判断。

3.基本掌握了Qtspim软件的应用和程序的调试工作,并更深刻地理解了汇编语言中机器指令的执行方法。

对各个窗口以及一些常用的菜单各个数据段的含义做到了一一熟悉了解。

还有基本掌握了内存的分配区间。

4.还有最重要的是多练习。

虽然基本上现在的这些程序都能做到看懂,但是一遇到让自己写的时候还是有许多艰难的,熟能生巧嘛。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2