arm实验报告最终版.docx
《arm实验报告最终版.docx》由会员分享,可在线阅读,更多相关《arm实验报告最终版.docx(24页珍藏版)》请在冰点文库上搜索。
arm实验报告最终版
ARM与嵌入式技术
实验报告
专业班级:
10通信工程1班
姓名:
万洁
学号:
100103011125
实验日期:
2013年5月28日
指导老师:
郑汉麟
1、通过实验掌握ARM指令的特点和寻址方式;
2、掌握简单的ARM汇编语言的程序设计;
3、了解集成开发环境EmbestIDE及其开发软件的应用;
、实验环境
EmbestIDE应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备的面向嵌入式系统的开发和调试工具。
其开发软件EmbestIDEforARM是集编辑器、编译
器、调试器、工程管理器(projectmanager)于一体的高度集成的窗口环境,用户可以在
EmbestIDE集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应用程序。
三、实验步骤
1)新建工程:
运行EmbestIDE集成开发环境,选择菜单项File宀NewWorkspace,如图一,系统弹
出一个对话框,键入文件名“wj”,如图二,点击0K按钮。
将创建一个新工程,并同时创
建一个与工程名相同的工作区。
此时在工作区窗口将打开该工作区和工程.。
(老师提醒:
不要放入Bin文件夹中)
■Emb«tQEPre亠Educat
「販]£dii_VwwBuidfrtbug
Dif**Qri+W
诊Open-"Qrl*O
2)建立源文件:
点击菜单项FiletNew,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。
编辑完后,保存文件“wj.s”后缀,如图三,四。
3)添加源文件:
选择菜单项ProjecttAddToProjectFiles,在工程目录下选择刚才建立的源文件.s
后缀文件,如图五,图六,图七。
ProjectBuildDebugTookWindowHelp
图五
图六
:
-43Workspace'w]:
1projectfs)^1@wjfiles
口ProjectSourceFiles■-LJPrajectHeaderFiles-“禺VI].s
图七
4)基本配置:
选择菜单项ProjecttSettings,弹出工程设置对话框。
在工程设置对话框中。
1选择Processor设置对话框,按照图八所示,进行配置:
岸切Fl«irvCompiler|emb*
图八
2选择Remote设置对话框,按照下图九所示,进行配置:
PeVdccsi-surl-lCOebugDirec.Vnvv'Compller!
4
I^IrviAfvii?
Lvriibewl.¥-4miFl»lurfurAUMf
V1TF:
&>ipiEEJ
C<*rraiiiunlEJkiliomtype:
3选择:
:
:
一L-J最右边一个进行编译,显示如图十,则编译成功。
Buildingproject:
wjarm-elf-as-gdwarf-^F!
\ARH\Ex3iiples\uj\wj-oAdebugkuj.oarn»-elf'Id-o.elf,\*iebug\wj.0
Cominandf?
)^uccessftilltjexecuted・
图十
④选择ProjecttSettingsDebug设置对话框,按图^一,十二,十三所
示,进行配置:
图十
图十二
图十三
⑤选择二:
一A最右边一个进行编译,显示如图十四,则编译成功。
Auiltlznqproject:
刖j
□rn-elf-a5-gdwarf2F;\ARH\Esc0iipiT:
5\切j\wj・s~o\debug\T>].o
arn-elF-ld-oAdebugXwj.elF.o
Conmand(5)successfullyexecuted・
5)选择菜单项DebugtRemoteConnect进行连接软件仿真器,将存储器地址改为
0x1000,如图十五,执行DebugtDownload命令下载程序,并打开寄存器窗口。
打
开memory窗口,按F10进行单步跟踪,观察寄存器的数据变化并分析。
Address:
R15;0x09001608
SP:
QxnOOOOHBQ
LR:
馭0卿0朋凹
PC:
axUOOOl0d8£PSR:
9K0SS38Bd3
H»U
r»pin
MU
广1.Bl*
上J
<:
=
add
产・;尸0“ifH;
■
ftE1■•:
i^atMiBin
%-HikIW
fFfff
_1
5*law
4kV«fffffF
3--:
4KD^ID1C
iHinu
a-:
i*i転0啊
H0■宅
#m:
c^Mtotkoe^—fhz:
iKiMiinDiHiaRofliictiir|APferipherHl|
按照老师所说的,将源程序的addr0,r0,r1中的add改为adds,并设置R0,R1分别为
0xffffff88和0x000000aa再次观察,得到如下结果:
noy
no
DhUdUUl0^4
ndulj
ri!
mv
rfi』叽rd]
asxjoeelesc
b
0x180c
tH00001818
nv
CxMFfrFFF
9XUOOQ1Blft
^uinv
QxDOFf^FFf
fiMaoDQiais
^.llKRtJ
flxDQFfFFFf
SmBOBQI01c
SUlllilU
flxBaFfffff
suinu
BxtVFfFFFF
SXUU&U1昨i
suilnui
U5{口叶"HHb
AxnDQOIQ7S
nv
GxfiftffFFff
0^89001B2t
syimv
QxOOffffFf
HMHHHH1MdII
cninu
収朋4“卜44
图十五
dE13:
'*R15:
第SP:
0lr:
9xonn0nooo
dPC!
0000199c
0EPSR:
0x2DUa0ad3dSPS«:
OXOOHO0O0O
—I■尸科u—
四、实验内容:
1.(原题目第二题)编写程序将R2的高8位传送到R3的低8位(不考虑R3的其他位)源程序:
.global_start
.text
_sta比
movr2,#0x66000000
movr3,#0x88000000andr0,r2,#0xff000000andr3,r3,#0xffflff00orrr3,r3,r0,lsr#24stop:
bstop
.end
/*把第一个立即数送进r2*/
/*把第二个立即数送进r3*/
/*取r2高8位到rO*/
/*r3低8位清零*/
/*r0逻辑右移24位后与r3相或,结果送进r3*/
调试结果:
nuu
r2,11711276092
HhNUMMIANil
nnw
rOps
dlld
r叭池、11-1*777216
foafiacifflai
bit
r3,r3,弓写
khcHUHMtHMii
err
r:
[,rB,\sr斗”
ftKOOOOlOl^
13
OK1014
OKlMDIOIfl
bujinu
DxQBfFfFff
HKMUHHiriC
强inu
UMHUIIfFFF
Ok«0BO1(^S
swin^
ONOOFfFFFF
flsaeantfli?
&
^uiinu
D>:
iOftFfFFf1=
ihcuaatHH&'A
;winu
ffFFF
①Download下载:
—Builrtingproj«ttwj?
arnrciF-as-gtluarfaF:
\.ARM\Bln\wj2Awj2.s-□.\dobug\uj2.o
Jflddress:
M
2
*a*1+2+3+^i*
»0fl1BM
647tiAH£3?
?
F$.."
nouuioK
時AHL3PF0^1"■■■
OODOIOtM
02E2FF30C3一.0-
nnaniRnr
E32)09CB9Fl,
uu^uimi4
FEFFFF1ERFF
DOQQI019
FFFFFFFFFF
nnaciifrir
FFfTFF『FFF
Ciomanid(s)exrcuted.
F1?
_s:
tfi-Earning!
endflFfilenot白tmdla
dirii-HJlF-ldF叭ifj?
・u>
②取r2高8位到r0:
900010»0nonr2,111711276002
鞅卿斛mov281326^979
网
sxflnflRinftRAnnrn#r?
ti-ifi777?
ifi
BXUUUC1QOcdier3,*25S
9k00GG191Qorrr3tr3rr3fJsr42■«
OOCdflmb0x1914
axnnntiisissmlnuexntiFffffF
BxLJHbUlEhrinuajcULM-1-+4;f:
P
8k90SBitzasuinu
ooeciS24suiFiusorrrfff
n舶帕PMZRsmluuftxSOffffff
罰Current
』HP:
HH4U14in^Hm鼻IH:
9xfl6«0d9Oe
0K2:
UH66UU0UUU
•RS:
9xB8«OS9O0
HUIf:
UMUUUUttUUU
*R5:
9KCQ«g^900
③r3低8位清零:
txaoasiiBD
■xifreaiBB4
naj
nun
|趴#1711276832r3Pll-2(l1320592f
oxsnoiaiadr
丸rm
F・p®>ihT772i丽
BxOHeDlHttc
biu
r9Pr2,it咖|
8x9060181B
arr
r3,r3,Lsrt24
8x90801614
b
0x191U
«xaoaaifiia
bwinu
^eaFFFfff
Axbimunn-tc
swlnu
lIXflrtl-FHtf
VXUUUU1U2U
suinu
uxnui-FH^f
EWCurrent
4KU:
«x66mWiR1;
dr?
z
dR9;
④r0逻辑右移24位后与r3相或,结果送进r3:
2.(原题目第三题)编程实现64位的加法运算,要求【R1:
R0】+【R3:
R2】结果放回
【R1:
R0】。
.global_start.text
_sta比
movR0,#24
/*R0=24*/
movR1,#12
/*R1=12*/
movR2,#16
/*R2=16*/
movR3,#18
/*R3=18*/
ADDSR0,R0,R2
/*R0等于低32位相加,并影响标志位
*/
ADCR1,R1,R3
/*R1等于咼32位相加,并加上低位进位
*/
stop:
bstop.end
■xUHh91hnil
mu
r«.WM
tKlHH町・的
rw»u
rlrB1?
£h(0@Q9im
rwv
r2.114
3k0@S9190£
IHfV
r3,118
妣陆的rpkmo
duds
ra.rOpr?
mifluvimi
41d!
c
1-1*rlFra
MxniiMHimi
n
WM1IT1K
Q^OC01191c
首Bn甲
Q^OQHFfF^Ff
€^06091920
$uinv
ON06FfFfFf
swinv
BHflBFfFFFf
ttxOHM9lE7M
nu
MxBOKFlff
sulnv
U>i4IUi1f1f1
I.Download下载:
T
乌単ams:
Bxiflfin
aoiMriona
i»
nn
nn
HMfllHfiBS
IB
E3
nuunukiA
Ail
12
MMiaOF
E3
02
00
ssMim
«3
10
m
…u.
--BuiIdingproject:
u]3-drPi-Elf-ji!
i-ydwdirf2FXARH\BinXvj2\deb&iy\uj3・当-ax\dtebug\iwj3.uF:
\ftRl(\eiiifc\wJ2\dvbug\aJJ-b:
ftirseuljlyrriu注』唱u*r:
SARt<\nliin\wJ?
\drhiig\uj3B5:
Q:
UrfFning:
nnArm-elf-l«d-n.XdFbuqXu'j3.ell-Vdpbuq\ujll.&
DumiidiiilKs)i>ucc^sbfullyux^uuled・
"Ft13;Qm00090990
:
dwui:
UKUUijwwiiwu
•ms:
nxnnnni
*sp;Boeoaaoa
dlk;
异*pc:
nxnnnnims
:
彳cpsr:
oxesaaaada
-A
神SP^R:
Bk00000803
①单步跟踪后的结果:
:
^00001600
IIIUU
F0,B21J
IHDU
r1,1112
awoOflsiooB
nou
r2,1116
GwOOfleiflOc
ITJOU
r9,tfIS
OkOOSMC1B
adds
rd,rfl,r2
kOQO0lO1if
ddc
r11r1,r3
-=>
Rx»oonois
b
0X1018
fix»«001H1£
suinv
OxOOfFffff
II-?
El
cnHmi
②存储器的结果显示:
+0+1+2+3+U
oomsee
18
OU
A0
E3
OC
■■■■
oesoieo5
10
no
E3
10
20
■■丽■
0600100A
E3
12
39
AU
…B
00Q01eor
曰
02
as
90
EO
■■■■
OQ0U&1JI
03
10
EO
FE
■■■■
006(1-1019
FF
FF
EA
FF
FF
■■•■
Q004101E
FF
Ff
FF
FF
FF
n■■■
③寄存器的结果显示:
R0—RO+R2;R1—R1+R3:
Reg
曰副Current
WRO:
0X60000028j|:
dR1:
OxOGOflOQIe
.R2:
OxDUOHflMO
B3;血卿胛凹霍
3.(原题目第七题)编写一段程序计算10!
.global_start
.text
.equnum,10
_sta比
movrO,#num
movr1,r0
s1:
subsr1,r1,#1
mulr0,r1,r0
cmpr1,#1
beqstop
bnes1
stop:
.end
bstop
/*把r1-1放入r1*//*r0*r1放入r0*/
/*比较R1与1的大小*/
分析调试:
hooooiovo
mov
mo
0x06091004
rwu
ro
0XQ0OO1QO9
subs
r1tIt1
OxOUOOl00c
nul
r1,rfl
OK00O0101O
cnp
tt1
0X00001014
beq
0x191c
OxO@001O1S
bne
ox1m
0X0600101C
b
0X101C
6XOB0O1O20
swinu
OK00FFFFFF
①第一次执行S1,r1=10-仁9,10*9=90,换成16进制是5a。
RD:
0x0090095a
R1:
0x00000009
R2:
OxOBOOODOO
R3:
oxflooeoaae
0x00801004
0X0O0Q13Q8
OxO0601OBc
ROMniousubsnul
ro,#10r1,rflr11r1,U1rO,r1,rO
8x00001010
cmp
r1t#1
1X88081014
beq
0x1Q1c
0x00601014
bne
0x1003
0X00001Q1C
b
0x101c
axemiEi2o
swinu
0xO0fFFfff
②
第二次执行S1,
r仁9-仁8,10*9*8=720,换成16进制是2d0。
三働—Current—
「“R0:
OxS9O0O2dO
)R1:
0x00000008
0R2:
0x90000009
0R3:
0x00000090
0x06001000
nou
rd,tlfi
BxOQOOl004
nou
r1tr0
0x00001008
subs
r1,rl.tt1
0(x0000106c
nul
r0,r1,rft
QNQQ001019
cnp
r1tS1
0X00001014
beq
0x101c
0x00001Olt
bne
0x1808
0X0000101C
b
0x1QIC
0X09001920
swinu
0X00fffFff
③依次执行S1,至Ur1=1,停止,10*9*8……*仁3628800,换成16进制是375f00。
-密—Current—
0RO:
0x00375(00
(0R1:
0X00000001
“R2:
0x90000000
LgR3:
0x00000000
4.(原题目第八题)
串拷贝(R0指向源数据的首地址,
R1指向目的数据串的首地址)
.global_start.text
•EQUNUM,8_sta比
LDRR0,=srcstr
LDRR1,=dststrmovR3,#NUMmovLR,PC
Bstrcopystop:
bstop
/*指向源数据串R0*/
/*指向目标数据串R1*/
/*R3=8*/
/*返回*/
/*调用串拷贝子程序*/
strcopy:
LDRBR2,[R0],#1
STRBR2,[R1],#1
SUBSR3,R3,#1
CMPR3,#0BNEstrcopyMOVPC,LR
E霁Cunrent
R0:
9x00008138
H1:
909Q819S
/*字符串的复制*/
/*装载字节同时更新地址*/
/*存储字节同时更新地址*/
/*判断是否结束*/
/*不是,则继续*/
/*返回*/
.data
srcstr:
」ong1,2,3,4,5,6,7,8/*定义源数据串*/
dststr:
.long8,7,6,5,4,3,2,1/*定义目的字符串*/
分析调试:
ConipilingFileiF:
XARN\£xanples\vjj\ujS\debug\vij\dBbug\uijU.s
arn-elF-asF:
\ARM\Exanples\wj\wj5\detjug\uj\debug\wjU.s-c_\debug\wj4_o
Pomnianr1(<;)^urcp^^Fully*Mprut"pd.
①单步跟踪后的结果及存储器的结果显示:
ldr
rfl,
[pc,
#28]
:
0X103B
UXUQSC1UC14
Iflr
【",
it28j
;0x163^1
&x0Qg(iioo»
HIDU
r2rttB
OKfJH9G10Hr
nou
lr,pc
0^00661010
b
0X1018
0x06061(Hh
b
0x1014
ldrb
r2(
[rU|
#1
0000101c
strb
[rt]
#1
2•存储器结果显示
十0
*1
*3
*3
09001001
2S
00
9F
E5
28
(…衣
*0091905
1S
9F
E5
GS
90
…-羽
A0
E9
0F
匚阳
AO
aoosiOOF
E1
OO
BQ
60
EA
&9001014
FE
FF
FF
E白
I
flibofliaiv
20
DO
E4
G1
■■■
moiaie
G1
EA
01
30
S3
AS
E迟
00
00
53
£3
..-S-
nnnni
ra
PF
FF
■io
寄存器的结果显示:
r:
nxnnnnisp:
axonnunoDnLM:
UMU(JUU-|U~l>1PC:
U^ltJ
cpsr:
OMoecooods
五、实验体会心得:
这是第一次接触ARM与嵌入式实验,在此次实验过程里,我发现实验课比理论学习课有趣得多,因为老师一边讲解怎么使用软件,一边询问我们相关知识点,不仅使我们记得模糊的理论知识变更加清晰确切了,而且也在对软件的学习实践中,增加了浓厚的兴趣,真正实现了手把手教的详细教学。
认真听老师讲,积极主动去思考,我发现学习起来,并没有想象中的那么难。
不懂的问题,不断去尝试调试,并请教老师,可以