实验五ARM指令系统实验二
注意:本实验在模拟环境下进行,请不要打开实验箱电源!!
一、实验目的:
1、掌握MDK开发环境下多文件编程的方法;
二、实验原理
我们编程时会以工程为单位来解决一个问题,为了解决问题的复杂性和人脑的局限性之间的矛盾,编程人员常常把把一个大问题分解成若干过小问题,每个小问题的解决方法在一个文件中实现,把每个文件解决问题的方法综合起来就够成了解决了大问题的方法。
这些文件之间是存在一定关系的,如果一个文件与其他文件不发生任何关系,那么就没有在工程中存在的必要了!从ARM汇编程序员的角度理解这种关系为:
一个文件有标号被其他文件引用,另一个文件应用了其他文件的标号;这用引用与被应用的关系分别通过import和export实现。
例如:
三、实验任务
下面文件中的定义的数据为某科目学生成绩,试编程找出最高分数的放在maxscore,score.s的内容如下:
;score.s
area score,data,readwrite
scores
dcb65,78,92,47,77,83,59,93,82,97;学生成绩numofstudent
dcb10;学生人数
maxscore
dcb0;存放最高分数
end
四、实验步骤
;A.s
……
export label
label
……;B.s……import label bl label……
说明标号label可以被其他文件引定义了标号label说明标号label可以被其他文件引引用了标号label
1、用自然语言描述解决给问题的算法,可以尽可能的抽象!
2、建立工程并建立源文件score.s并把输入(复制)上面内容,并将该文件添加到工
程;
3、建立文件maxoftwo.s,在文件中实现子程序getmax,调用者传入的参数位于
r0、r1中,要求找出r0、r1中的较大值,并把较大值保存在r0
当中,该文件架构如下:
;maxoftwo.s
;两个要比较的数在r0,r1中
;比较所得的最大数放在r0当中
area max,code,readonly
getmax
end
4、建立文件init.s,通过调用maxoftwo.s和score.s完成任务,自己编写代码,
注意下页有该文件的参考代码,但希望同学在实验课上尽量不看参考代码或少看代码!
import scores
import numofstudent
import maxscore
import getmax
area init,code,readonly
entry
ldr r2,=scores;指向学成成绩
ldr r3,=numofstudent
ldrb r3,[r3];获取学生人数
ldrb r0,[r2];获取第一个学生的成绩,并暂时认为它是最大的loop
cmp r3,#0
beq exit;判断是否比较结束
ldrb r1,[r2],#1;获取要比较的数
bl getmax
sub r3,r3,#1;人数减一
b loop
exit
ldr r1,=maxscore
strb r0,[r1];将结果保存在maxscore中b.
end。