山东大学嵌入式实验报告.docx

上传人:牧羊曲112 文档编号:5178688 上传时间:2023-06-11 格式:DOCX 页数:30 大小:265.63KB
返回 下载 相关 举报
山东大学嵌入式实验报告.docx_第1页
第1页 / 共30页
山东大学嵌入式实验报告.docx_第2页
第2页 / 共30页
山东大学嵌入式实验报告.docx_第3页
第3页 / 共30页
山东大学嵌入式实验报告.docx_第4页
第4页 / 共30页
山东大学嵌入式实验报告.docx_第5页
第5页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《山东大学嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《山东大学嵌入式实验报告.docx(30页珍藏版)》请在三一办公上搜索。

1、嵌入式实验报告班级:电信工X班 姓名:XXX 学号:20120012XXXX实验一、ARM汇编指令实验一简单数据搬移实验实验目的:熟悉实验开发环境,掌握简单ARM汇编的使用方法实验内容熟悉开发环境并使用LDR/STR,MOV等指令访问寄存器或存储单元;使用ADS/SUB/LSL/LSR/AND/ORR等指令完成基本数学/逻辑运算。实验要求(1) 按照前面叙述介绍的方法,在ADS下创建一个工程asmlabl,定义两个变量x,y和堆 栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个 单元。通过AXD查看寄存器和memory和寄存器中数据的变化。(2) 在指令后面

2、加上适当注释,说明指令功能。(3) 指出程序执行后各相关寄存器及存储器单元的具体内容。程序代码截图如下:AREA Init.CODE READONLYENTRYCODE3Zz EQU 457 EQIT G4stack_torEDU OzlOOOstart MOV5F. Tstack_top没宜栈州址RO.m的值赋四时E?0. 5P汕入栈,印苴的苦入栈RO.电的值赎纶齐E?l. 5F格作出栈,成 E,叩K1中仁触又的信RO. BO. HIRO=RQ4R1E?0. 5F.#4光枝.4廿+4 :一3仙为八忖招哆案.再44心山*m削到云相右将 宙有器B .EKH程序运行结果截图:1AJJJ920T -

3、 Memory S t :=lt t addr*|0K1000Tat! - Hen -No prefis TslB2 -Hex -ffu pre lk jT 品)3 -Addreaa01234580x0000100023000000砧000010x000010101000FFE7 0ES0010x000010201000FFE700ES001OjiOOOOLOSO1000EEE700ce001ri zccccq ririT fiIT IT1717 Ocrii由实验结果可知堆栈的第二个单元中存放了 x+y的值6D练习题编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max变量之中,最小值

4、存 在于min变量之中。提示:数据的定义采用伪指令:DCD来实现。基本思路:利用R0做基地址,将R1,R2分别放入第一单元的内容,利用R3做循环计数, 利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的R4数据则将R4的内 容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2,。遍历完成之后,R1将 存放最大数据,R2将存放最小数据。程序代码截图如下:ABEA comp,CODE,BEADON1YENTRYCODE32STAET1DK R0,=皿T1DR Rl,ROIDK K2, KCMOVLOOPADD KO,BO,14IDE E4,EOCMP R1.K4MOVIT E

5、1.E4CMP R2.E4MOVGT R2.E4ADDCMP R3,批BIT LOOPB .AKEA D,DATA,KEADONLYDAT DCD 11,-2,35,47,9G,G3,128,-23END程序运行结果截图:AXD实验二ARM汇编指令实验2字符串拷贝实验实验目的通过实验掌握使用LDB/STB, b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。实验内容熟悉开发环境的使用并完成一块存储区的拷贝。完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。实验要求(1) 按照2.3节介绍的方法,在ADS下创建一个工程asmab2,定义两个数据存储区Src 和Dst,Sr

6、c用于存放原字符串,Dst用于存放目的字符串。堆栈地址0x400,将变量 原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符0),并统计字 符串的个数。通过AXD查看寄存器和memory和寄存器中数据的变化。(2) 在指令后面加上适当注释,说明指令功能。(3)指出程序执行完后各相关寄存器及存储器单元的具体内容。程序代码截图如下:AREA Ini-,CODE,EEADCNLYENTRYCODE327炒丁iiOV 3r /0x4 3 0,没置栈的杪底IDP RO =Src=;将字谷丰以u加鞍至寄有器ROLDP El =Dst:柄字徊由。我加巍至寄存器KOV R3 #0;给段赋值为Clstr

7、copyIDPB政,加1所指的帝存器的内吾加虱至成CMP R2 #泪 ;检网主姑 若险测到主松如一扰行sHzom处程疗,不孕干学则继续批咛FF口 Rndnnry,新烤车 rti H 仁口时ETPB R2, -R1L#1;将砺中的值复制到R1+1所指的寄存静中ADI R3 R3,粗I o Li i_Ljpy,眺转至n Lj. jljw I浦环技行endcQp5rLDP RO =B7teNum;将字符吊中字符个数赚值纶砚JzlH E3 LKUJB .WF7 r)A-APnnl DATA RFATiWPTEErcS DCB string分配一片座续的字节存储单元,并月指定的数据初始比Dst DCB

8、O.O.J, 3,0,0,0,0,0.0 D,口,D,口,D,口,口,0,Q,口EteNun DCD DEND程序运行结果源字符串f r J =T= Ud L-ZJUI * -I- _DF1 fl-nx;者曲!E宣为0-raaHaaaoeoio*elawaaaoeoaiF0X00000073-r3OHOODOaODOJ- r4OmOODOOODOr5OmOODOOODOWDkOODOOODOr7OkOODOOODOe8OkOODOOODOF90x00 DOO ODO-rLOOhOODOOODO-rllOhOOOOQOOOT1314iua fiXp UObR3r#0streopyI 1DGB R

9、2叫日异衍RO地址加二所指的寄存器的内容加宝CMP RZr#32:检测空楮,若检刘到空楮则执行如企理BEQ endc&p/;fcS$ 至 hUg叩丫STRB R2RLh#特聪中的昼臭 制为娘ML所旨的善存器 ADD R3.R3.41:跳转至俯环bi行AddresaaL23457e | gabedfaaaa3O4a7J72SE672Qaaaaaaaa0aaoaaaaa)x3000-3050OQCO0000DODOOCco000D00oo00CO0000rlJfl930T - Nnory Start *ddrQj;!040string故 1 H翊 一 Wq jrefiK | T】B2 -心立-的

10、prtfin I T43 - H】才Jk pshsE I Tab1! - Hen - Jfo prijc iJl5CIIIDS RO,-船屹H皿;特手析主中手待个戳曜谊君丈字符串复制后两个数据存储区Src:0x8040和Dst:0x8047中的数据情AEJ1Q20I - Men ury Stai-icdrzOOlZ 1TaBI - Hex -Ho prefix1*11112 - Hw - Bioprafi3 |- Hw - Wb prefix Tati - Ifcw - Hb prafii Addressa i2 | 3 | 455 1 n S J 9 J. a i J 2a eL:USCZI

11、Dz0t!00804073747253 5E5720737472 5S 6E 67000000istiina.CkDQ006D5000 0D0000000000 DO DO DO DO 00 W000000实验三ARM汇编指令实验3-ARM处理器工作模式实验实验目的(1)通过实验掌握学会使用msr/mrs指令实现ARM处理器工作模式的切换,观察不同模 式下的寄存器,加深对CPU结构的理解;(2)通过实验掌握ld中如何使用命令指定代码段起始地址。实验内容通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM 不同模式的进入与退出。实验要求(1) 按照2.3节介绍的方法

12、,在ADS下创建一个工程asmmodelab,完成各个模式下的堆 栈初始化工作,并将R1-R12的内容存入当前模式下堆栈。通过AXD运用单步执行 方式调用程序,验证工作的模式,使用寄存器观察切换到不同的工作模式下观察SP (R13)的变化情况。(2) 实验过程中请记录并思考以下内容:1)程序复位之后系统处于什么模式?2)记录每种模式下的厨师堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同。3)切换成用户模式之后还能否从用户模式切换到其他模式?4)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前

13、和之后其堆 栈区域的变化情况。5)观察本程序模式切换过程中SPSR有无变化,并解释其原因。程序运行结果截图:u.3r_:=:teck_legth equ 64s!Ji:=:tack_ leg th equ 32f in_stack_leg-th etpi 16iTq_stu 白。a.bt_s t ack_ legth equ 1 Gu.rid_s t ack_ legth etpj 1 GMima reset , code, readcailyentTycode-3 2staootrO.0Mcn.r rl. iKlxoi.r y-22Mcn.r r 3 . 3MCT.r r 4 . 4MOVH

14、OV E-& . JC ov rB. Jt I*ov rLD.#10rll.#L11OV rL2. JL2bl imtatack i所始!匕&模式下的堆栈粕折.打并i rq中Bh:相匚口立宙存器的i枝渭助MTa i0 .cpsi ;rD =r cpsr_c, yajcdO .110 2D0DDJ: I, E 位宣 L 关闭 LEQfPFIQ 中断,T-0, 2JU15M 亍.M J4.01 /IDdJDO 进入用.户携式rO.epsrstMid spl. Tl-rl2-;Rl_E12Aba:切换到窜理栈式M:=:r cter.a.irasdf .110 llllli b E检甄L 美!闭IRQ

15、卸IFID中断 T=L ARH机行,HI 01 11111 进入豪蔬模式 rd .cpsrhalth haltini tstaclcmow rO, Lr ;r01玲将连接寄存器的值蜷靖即:没置管理模式堆栈 iiisr cpar_c,#0xd3 Ldr sp,. staclovc stmfd sp!,rl-rl2j 11010011 cpar4:0.设置管理模式堆栈地址 ;E?1_R12入栈,满递诚模式:函置中断模式堆栈 msr cpsr_c,#0sd2 Idr sp,stackirq stmd sp!,rlrl2J11010010设置中断模式堆栈地址 jRl R12入栈,浦递减模式:没置快速中

16、断模式堆栈msr cpsr_c,#0xdl ;11010001Idr sp? stackiq 设置快速中断模式堆栈地址 stivifd sp! .rl-rl2_:R1_R12入枝,满连减模式:没置中止模式堆栈msr cpsr_c.#0Kd7 j11010111Idr sp, stackabt :段皆中止模式堆栈地址Etmfd spLrl-rl2 jE?l_E12入栈,满递减模式;设置未定义模式堆栈iiisr cpsr_c,#0sdb j 11011011Ldr sp, stackund :设置耒定义模式堆栈地址 atmfd apLrl-rl2 jRl_K12Ai 满通碱模式:没置柔统模式堆栈j

17、usr- cpsr-_cr -ffOxdf ; 11011111Ldr sp, stackusr 设置素统模式堆栈地址stmfd spLrl-rl2 jE?l_E12入栈】 满递喊模式Iihqv pc? r0 ;爆回;为各模式堆栈开辟一段连续的字存储空间|stackusr Etacksuc stackirq atacl iq stackabt stackunddcd Lisistackspace+ (usr_stack._legtli1) *4 dcd e vce t ackspace+ (svc_taclc_legth-l) *4 dcd irqstackspace+ ( irq-Stack

18、-leg-th-L) *4 dcd f iqstackapace+ ( f iq_staclc_leg-tli1) *4 dcd ab t s t ackspace+(abt_stack_legth-lj *4 dcd unda t ackspace+ (und_atack_legth-L) *4area reset, dats, no in i t, a 1 i gti= 2usrstackspace svcstackapace irqstackspace f iqEtackEpace abtstackapace undstackspacespace uet_e t ack_1eg t h

19、* 4 space avc_a t ack_1eg t h * 4 space lzrq_stack_legth*4 space iq_stack_legth*4 apace ab t_a t ack_1eg t h * 4 space und_s t ack_1eg t h * 4 end6)程序复位之后系统处于什么模式?答:程序复位之后系统处于管理模式。-pcOxOOOOSOOO?cpsrnscvqlFt _SVC7)记录每种模式下的初始堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同。H rl3:rl4

20、ipc0x00006240DX0000803EOxOOOOaOGfi nscvql Ft_SVC即管理模式的栈顶指针为0x8240-rl30x000062104950?tmfd aplr (rl-rl2;Tarset ImagQ1 Fnlas CL#51+ 52|;设宣中断模式堆栈msr cp3r_s, #0x o rtr72Li_LLf kJ U U Lrf-A U-LXi-L jLE3. =1atmfd apLfrl-rl2737475,设IB系统模式堆栈76msr cpar_c,#0xdz ;110 11277Idr spr stackusr :设 IE 系 W78atmfd apLfr

21、l-rl279rl3-C140x000083900x00000000LIpc0x00008090-cpsrspsrnzcvqIFt_fiio rt nzcvqift_R-esUs er/System.Wf-观察r13,中止模式的堆栈地址为0x83C0M920T - Memory Start addr0x8390abl 一 HeK 一 No prefix jT:b2 - Hex - No prefix | T:b3 - Hex - No prefixT:b4 - Hex - No prefix rLddress0134567egabcdeX00008390 01000000020000X0000

22、83A0 05000000060000X0000S3B0 090000000A0000X000083C0 00000000000000000300000004000000000700000008000000000B0000000C00000000000000000000000031含 Image Files Classr rl3 krl4i-pc0x0000fl4000x00000000oxoooQflosans cvI Ft _Unde 三观察r13,未定义模式的堆栈地址为0x8400Hrl31-14 fPC :-cpsr :,-3psrBUser/System0x000083D0 0x00

23、000000 Ox0000809Cnz cvql F_Unde f n2CvqirL_R-es JT72737475-+ 7C777879j 上t j m i、&* mr C/*-b 1 f.stmfd aptfrl-rl2,设包某统模 式堆栈mar cpar_cP -ftOxdf ;11011Idr spfStackusr ;设置某: stmfd srpl P rl-rl2_ -!:=: ge tIniageFiles | Class1 LAEM92QT M em oryStart addr0x63d0Tabl -at 一 NoPre = ix Tab2 - Hex - No prefix

24、Tab3-Hex-oprefix | Iab4 - Hex - Nu prefix Address | 01 | 23 | 4J5J. & I7s9J. EibCde=0x0000S3D0 01GO 0000020000000300000004000000OxOOOOScEO 050000000500000007000000 魅 0000000X000083F0 09GO 0000 0A0000000B000000 0C 0000000x00006400 004 n j. ji j.GO 000000E800ES1000FFE700E8 00 E8m rn 满递减模式,r1-r12压栈后,未定

25、义模式栈顶指针为0x83d0,相距0x30,压入12个字(系统模式)i E13 r-rl4OxOOOQELGO0x00000003Ox 0 000SOA4:cpsrn.acvijIFt_SYS观察r13,系统模式的堆栈地址为0x81C0rl30x00008190rll0x000000000x00008OAE:-sp3rSUser/SystemnzcvqIEL_SYSUnavailable7K7980SI52S384S5stmtd. spl P rl-rlZmDV pcr rO ;返回T:=a-ge + Image Files | Class;为各模式堆栈开辟一段连魂的字存f s t ackus

26、 rdcdusrs tackspia us r_sis tacks vcdcdsvcstackspace-l- (svc_ss3 EiacRl rqled1 rqs uacEspa ce-i- (1 rT at 1 一 Hex 一No prefix jLib2 -Hei - Noprefix T:b3 - Hex-No prefikTab4-Hex No prefik Address01n3456789abc d ez0x000051900100000002000000C3 00000004000000OxOOOOBlAO05000000 Ofi0000000700000008000000Ox

27、OOOOSIBO09000000 0A000000CB 0000000C 000000OxOQOOBICO0000000000000000CO 00000000000000OxOOOOSIDO00000000000000000000000000000000满递减模式,r1-r12压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同:快速中断FIQ模式中:R8R13都是0。这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。8)切换成用户模式之后还能否从用户模式

28、切换到其他模式(如系统模式)?HcpsrL-sp3rbUser/SystemnzGvqIFt_UsErUnavailable41* 4Z43haltb halt答:在该例程中,由用户模式不可以切换到系统模式。当处理器工作在用户模式时,正在执 行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。9)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。答:用户模式下能执行堆栈压栈操作。未压栈时:用户模式堆栈指针初始值为0X8190rl3rl4pc cpsr spsr0x000031900x000000000x00008048nz cvqlF

29、t_User Unsvia liablemsr cpsr_cxsfPr0 ; cpsr;切换到用户模式msr cpsr_cr #OidO ;110 10Q mrs rOr cpsrstrfd splfrl-rl2;Rl_R12AEM920T 一 Menory Start aiiiirt|0j:8160Tahl Hex - No prefix |丁包址 一 Hsk 一 Ko prefiK | TahS 一 HeK 一 No prefix | Tab4 - Hex 一 No prefix |Address012345789abc def0x00008160 0000 DO 000000000000

30、00000000 0Q 00000x00008170 0000 DO 00000000000000000000 0C 00000x00008130 00 OO DO oo OO OO 00000000000000 0Q 00000x00008190 0100 DO 00020000000300000004 0Q 0000;切换到省理模式T:=Lfge+ Image Files I Class压栈之后,堆栈指针减小0x30,这是因为堆栈设置为满递减模式,所以堆栈指针减小0x30, 存放12个字。-rl30x00008160rl40x00000000-pc0x00008050-cpsrnzcvql

31、Ft_User-spsrUnaviailabl-eTarget Image Fales | Cl:=issJUJ 25 AbA 工1=-If+ 39|msr cpsr_cF #Oxdf ;110 11140nrs r0T cpsr4142haltb halt4344initszackmov rOr lr ;rO-lrP 连拌45dAEM92DT 一 Memory Start adiit|0n8160T:mbl 一 Hex 一 No pretiK Tab2 - Hex - No prefix T:b3 - Hex - No prefix Tabl - Hex - No prefix jAddre

32、ss0123J. 457egbC己J.=0x00006160010000000200000003000000040000000x0000817005000000OS000000070000000E0000000x0000818009000000CA0000000B0000000:0000000x000061900100000002000000030000000400000010)观察本程序模式切换过程中SPSR有无变化,并解释其原因。答:模式切换过程中SPSR无变化,因为在整个切换过程中没有异常发生,所以SPSR无变 化。实验四ARM汇编与C混合编程实验ARM启动过程控制实验实验目的(1) 掌握建立基本完整的ARM工程,包含启动代码,C语言程序等;(2) 了解ARM启动过程,学会编写简单的C语言程序和汇编程序启动代码并进行调试; 掌握如何指定代码入口地址与入口点;(4)掌握通过 memory/register/watch/variable 窗口分析判断错误。实验内容使用汇编语言编写初始化程序,并引导至C语言main函数,用汇编语言编写延时函数实现毫秒级的延时,在C语言中调用延时函数,实现1s钟定时。实验要求(1) 按照2.3节介绍的方法,在ADS下创建一个工程armasmc,编写3个文件,通过AXD 运用单步执行方式进行调试程序,观察程序

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号