山东大学嵌入式实验报告_第1页
山东大学嵌入式实验报告_第2页
山东大学嵌入式实验报告_第3页
山东大学嵌入式实验报告_第4页
山东大学嵌入式实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、2) 在指令后面加上适当注释,说明指令功能。(3) 指出程序执行后各相关寄存器及存储器单元的具体内容。程序代码截图如下:AREA Init.MDE.READOMLYENTRYCODE32X EQUEQUOkIOOO7 EQU stackp o o o 1 Q o5 RffR R R RV V R V E D oo T OD DnM M s M L A s"D t N T BE#Htacktop;设置栈顶,也址X的值赋畲如1SF;R 口入栈,即lx的值入检#y;杷?的值赋给RQSP;数据出栈,放入RL即R1中存放式的恒RQ R;RQRQ+R1SP,#4:先执行(ARM沟32位指令集,再

3、将R。内容型制到SP指向的寄存器程序运行结果截图:ARH92UT - MemoryStart addr4OxlOOOzJT«bl - Hex -No prefix JTat2 -Hex "No prefix|Tab3 -Andreas012345百OxOOOQlOOQ2D00000000000x000010101000FFE700E3000x000010201000FFE700E8000x00001030二00EFE700E200 Jnni n jr n1 AnAr nAn由实验结果可知堆栈的第二个单元中存放了x+y的值6D练习题编写程序实现对一段数据的最大值和最小值搜索,

4、最大值存在于max变量之中,最小值存在于min变量之中。提示:数据的定义采用伪指令:DCD来实现。基本思路:利用 R0做基地址,将 R1, R2分别放入第一单元的内容,利用R3做循环计数,利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的 R4数据则将R4的内 容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2,。遍历完成之后,R1将 存放最大数据,R2将存放最小数据。程序代码截图如下:AREA cornip.CODE.READONLY ENTRYCODE32STARTLDR R0.=DATLDR RI,ROIDR R2,R0MOVLOOPADD RO,RO,#4LDR

5、 R4,RUCMP R1.R4MOVLT R1,E4CHP R2,R4MOVGT R2.R4ADD R3,R3,#1CMP R3M8ELT LOOP BAREA D.DATi,READONLYDAT DCD 11,-2.35.47.96,63,128T3END程序运行结果截图:£ min.51-czr B |AREA Init,CODE.READONLYENTRYCODE3ZstartLDR R0P =DataEufLDR R1JR0LDR R2PROMOV R立蚪.声明代码段程序 ;程序入口首舞个环诅的一循敷组第录将教的运;:组R3地一值次赋值给给赋R2LOOPSUB B 土 E土

6、 01CMP R 土 JfO HLEQ RESULTLDR E4,RO;艮3与口比经,若为0,则遍历络京:当前遍历的数据赋给R4CMF RLR4BLLT MAXCMP况1.即BLGE MINB LOOPKINMOV RLR4ADD RU,R0,34B LOOPMAXMOV R2,R4ADD FkEkf4B OOPRESULT B:若则跳转到MAK若R1aRL则跳转到mN;RI存放最小值 ;指向下一个数据;R之存的最大值.指同下一个数据DataBuf DCD 11 -2 25.47,96,63.128-23END蚣(,划 Line 36 Cd 2Filt Search Proets so r V

7、iews Syst*rri View Ek/ut Optiohs Wiiridow IH#lpRegisterValue"Current()r-rOQxQgOEOMi""rlOXFFFFFFFEr-r20x00000060*3OzOOOOOOOO5140x0000003Fr-r5OnQgUgg"七后0X0 Q 0( 00 DOr-z70x00000000ARM920T - Rfrgist«i*sTarset Ima£«| Fil«s Class田国 C:ADSwcrltspace'4)rojmi我Ml I回

8、阍回国局同|图| |后回旧画回回回;| 上|山倒工ARM920T - D:,ADSwork5paceprojminminB521B LOOP22MIN23MOV R1.R424MD犯叫/425B LOOP26MAX27MOV R2.R42BADD RO,RO, t424B LOOP30RESULT4 31|b .32DaSBuf DCD 13334END3536;HL存放:&小宜 ;指向下一个数蛔:R2存放:K大学;指向下一个数幅-25,47,96,6325.-23CdmaaiLd Lin虫 Inter fice实验二ARM汇编指令实验2-字符串拷贝实验实验目的通过实验掌握使用 LDB

9、/STB , b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。实验内容熟悉开发环境的使用并完成一块存储区的拷贝。完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。实验要求(1) 按照2.3节介绍的方法,在 ADS下创建一个工程asmab2,定义两个数据存储区 Src 和Dst, Src用于存放原字符串,Dst用于存放目的字符串。堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的个数。通过 AXD查看寄存器和 memory和寄存器中数据的变化。(2) 在指令后面加上适当注释,说明指令功能。(3) 指出程序执行完后各

10、相关寄存器及存储器单元的具体内容。程序代码截图如下:AREA Init,CODE. READONLYENTRYCODE32STARTMOV SP, #0k400 :设置堆栈的栈底LDR RO, =SrcS i:将字符串Ere加载至寄存锢rR。LDR RL =Dsti:将字符串Dsit加载至寄存锢rRlMOV R3,#0:给郎赋值为口streopvLDRB R2.艮0.#1;将R0地址加1所指的寄存胎的内容加载至R2CMP R2,#32|;检测空格,若检测到空格则执行日ndspy处程序,不等于零则继续执行BEQ endcopy:跳转至日ndccip?STRB R2.将R2中的值复制到R1+1所指

11、的寄存第中ADD R3,R3,#1B strcopy:跳转至mtre:口py,循环执行endcopyLDR RCI, =BvtENum;将字符串中字符个数赋值给R3STR R3,RD B .AREA Datapoo1,DATA,READURITESreS DCB "string分配一片连续的字节存储单元,并用指定的数据初始化Dst DCB ,口,口,口,口,口,口,口,口,口,口,口,口,口,口,口,口,口,口ByteNum DCD 0END程序运行结果 源字符串11J3G 上日 UJ t-r 'T'J-J-IM up - nBtqfaFTrr-Ti&C上!-

12、r002<00£!0804:013HCV R3.40:野皤携虫为0i-rlOMonooeon14jtrccpyPr20x00000073* 15| LEHB镭R 口地址加1所指的寄存黠的内容加货0x00000000LI1OF R2,432;性功空格.若检测到空格则执行wndtrDpi17BEQ endcops:跳装至 endccpy'JX U U UUUU'U uieSTRB R2JM】.打:将M中的空党制到RL+1所拒的咨存器工HrSOxOOOCOOOO19ADD R3RR3r#li-r6031000000002Qi-r7Ox0000000Q21B strfi

13、apy:跳转至口士工ucp?,错开执行i-reOxOOOOOOOO22endcopyb-r90x0000000023hrlO0x0000000024匚际R0P =电8打5:将字将串中字符干敷吐苴给R3-rllCixDOOOOODO潮920T - lllemry St4rt 虱drOx即WJO刍Ebi Hh "耳。prefix | 丁站2 - Hex 一 tfo prefixTil>3 -H电3c - Ko prefix Tab4 - Mex 一 N力 prefix |012345石7B9A bt J_ d eLASCI:stringDODQ000000DO00000000000

14、0000000000000MO008040 73747269®E6720)XD000805Q 00QO口口000000OO字符串复制后两个数据存储区 Src:0x8040和Dst:0x8047中的数据情WdflgfflT - N tfmory St«rl addr0x8O4D- Kei - No jreEix TabZ = Mes = No prefix Tab3 - Hex - Vo prefixTab4 - Mes - No prefiiK |Addreaa012345£7®ga二 二d£fJIECII配672073740000000000

15、0.X000UBU40 73f472690x00006050 0000000072MEE6700000000OiD0006000000实验三ARM汇编指令实验3-ARM处理器工作模式实验实验目的(1) 通过实验掌握学会使用 msr/mrs指令实现ARM处理器工作模式的切换, 观察不同模 式下的寄存器,加深对 CPU结构的理解;(2) 通过实验掌握ld中如何使用命令指定代码段起始地址。实验内容通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握ARM不同模式的进入与退出。实验要求(1) 按照2.3节介绍的方法,在 ADS下创建一个工程 asmmodelab,完成各个模式下

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

17、PSR有无变化,并解释其原因。程序运行结果截图:wsr_stack_Legth. equ 64 ta.ck_Legth. equ 32E i(I_staDkleg t h. equ 16 i riq_s t ack_Leg t h equ abt_stackLeg t h. equ 16 un.d_s t ack_Leg t h equ 16rese-t . code. TEadonly entry cocbe32startu.ov #0睡口口 T 1n. #1HLOV C 睡iLCiv hL #4mdd i5.hlQv r&. #6mdd t7.97 iLCivwiov工九49ild

18、v rlOlDB.OV ill.#11ILDU 堂普 J #12bl fit stack,初始化各模式下的堆桃指针t0<-cpsi:打开工丁q斗斯相口阵工商存髓的i位法叫bie rD.r0,lf0xe0 .憧清尔,CPSR的L.F位造零,开工RQ和F1Q中断 hist cpsr_GKsf -tO ; cjfflr<r0 i 开工R4和FI0中断 :切捺到用户强或ftisr cpar.eSKdO ;110 LDOOOd I. PE置L 美同工酸和EKQ中断,T=0. 挟行、M口口】为工口叩口进入用户模式Mrs xQ.cpsrBt>fd 氐p 1r 工t12;R1E12!人找;切

19、报到音理模式、MXF CD3F_c,<0>«if j 110 Lilli; I. F位桀词工RQ和F1Q中Bf T-Q. ARM执行,H 4 03 为 11111 进人累吭模式nits rD,cpsrhaltb haltinitstackmcv rO , Ir ; r0< Lr,将连接寄存器的值赋给RO;设置管理模式堆栈 msr cpsr_c,#0xd3 Idr sp,stacksvc stikf d sp I , rlrl2;设置中断模式堆栈 mar cpsc, #0xd2Idr sp,stackirq stmfd sp!,(rl-rl2);110 10011 c

20、psr4:0;设置管理模式堆栈地址:R1_R12入栈.满递减模式;110 10010:设置中断槿式堆栈地址 之入栈,满逸减模式;设置快速中断模式堆栈msr cpsr_c,#0xdl ;11010001Idr sp,stackfiq :设置快速中断模式堆栈地址 stjufd sp! ,rl-rl2;R1_R12入栈,满递减模式:设置中止模式堆栈msr cpsr_cH JF0xd7 ; 11010111Idr sp, Etackaht ;设置中 止模式堆栈地址stmfd sp<,rl-rl2 ;R1_R12入栈,满递减模式;设置来定义模式堆栈msr cp3r_c,#0xdb ,11D 110

21、11idr sp,sTackund:设置耒定义模式堆栈地址 stinfd sp< , rl-rl2 ;R1_R12入极,满通减模式;设置系统模式堆栈insr cpsr_c, #0xdf ; 1 ID 11111Idr sp,s7ackusr ;设置柔统模式堆栈地址stmfd sp! ,rl-rl2人栈,满递减模式Imcv pc,rO ;返回;为各模式堆栈开辟一段连续的字存储空间Istackusr stacksvc st®ckirq stackfiq stackabt 营taokunddcd usrstackspace+(usr_stack_legth-1)*4 dcd svcs

22、tackspace+(svcstack_legt h-1)*4 dcd ir(jstackspace+( ircLstacklegth-l )*4 dcd fiqstackspace+(£iq_stack_legth-1)*4 dcd abtstackspace+(abt_stacklegt h-1)*4 dcd undstackspace+(und_staGk_legth-1)*4areausrstackspace svcstackspace irqstackspace f iqstackspace abtstackspace undstackspacereset ,data. n

23、oin11,5ilign=2space space space space space space endusi_stacklegth*4 svc. stack_legth*4 irq_stauck_leg th»4 f iq_stack,_legth*4 abt_stack_legth*4 mid_stack_legth*46)程序复位之后系统处于什么模式?答:程序复位之后系统处于管理模式。h'pcoxooooeoooHep srnzcvqIFt_SVC7)记录每种模式下的初始堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。并分析快速中断FIQ模式与其

24、他模式存入的R1-R12有什么不同。(快速中断模式)h rl3;-rl4=""PC:cpsr0x00003068nzcvqlFt SVC即管理模式的栈顶指针为0x8240Frl3工FiLti Cl in1ai a :DjiOOOOE2104950SIS2atmfd sp! r;设直中断槿式堆喳mr cpsr_er 10xd2;110 IOC满递减模式,r1-r12压栈后,管理模式栈顶指针为0x8210相距0x30,压入12个字OXDOOOB2400x00005035满递减模式,r1-r12压栈后,中止模式栈顶指针为 0x8310,相距0x30,压入12个字(中断模式)i-&

25、#39;r 130x00008340Hr-14QxQOOOOOOOH-pCOxOOOOSC?4ii-cpsrmcvq1Et_HRQL-3psrrLZCVqift_R»3-TTj r 一1 F U观察r13,中断模式的堆栈地址为 0x8340-F13Jr 14"pccpsrf-spsr ©"User; 5ys ten0x000083100x00000000OxOOOCBOTe mcvqIFt_IRQ nzcvgift_Re3;设宣快速中断模式堆栈 tr cpsr_c.r frOxtil ;110 IDt Idr 3prstackfiq ;设武快S atmz

26、d sp!,rl-r!2Target Image | FilesClassAFW920T " Memory Start ddr« 08310告Tabi -加k -Ho prefix Tab£ -Hex-Ho prefix |TabS-Hex. 0 No prefix | Tab4=Kex = No prefix |Address01234 S67 e aab cde f0x000083100100 DO00020000GO 030000000400口口 00000006320O'S000000060000000"0000oo oe000000(j

27、* 口。触口 9 0 Q 口00A OQ00m 0B oo 0QQ 0C00OC 00OxOOOdB34C000000000000000000000000000000000x8310,相距0x30,压入12个字满递减模式,r1-r12压栈后,中断模式栈顶指针为kri3oxooooeaeoj-rl40x00000000Fpcoxooooeoeof-cpsrnscvqIFt_FIQ1观察门3,快速中断模式的堆栈地址为0x8380j-T13卜甘工4:一 pcHcpsrspsrS-User./System0x00008350 0x00000000OxOOOOeOE4 nzcrvgIFt_FIQ nzc

28、vqzft_Re5 ):设直中止模式堆嗤 m r cps jg #0xd7 ;110 1Idr sp,stackabt ;设置斗 stmfd sp!,rl-rl2)TirE工m,g。FilesCl&SE;设宣未定义模式堆栈满递减模式,观察运行结果发现,快速中断模式中只有R1-R7压栈了,这是因为在快速中断模式中,可访问的寄存器只有R1-R7 ,不能访问R8-R12,快速中断模式下有自己的R8-R12。ARN920T Memory Start mddr杯旃石Tabi " H«x "prafiK |TtbZ -Hk -No prafixT*b3- Mq pre

29、fix | Ttb4-Htx"Nq prefix |Addr»s01234567B9abcd-efOXOOOOS3SO010000000200000003000000040000000x0000636005口。00Q0060000000700Q0oo000000口。0x00003379C3oc00210000000C3oc002100000coC3ocOxOOOOBSaD0000DO000000000000DO000000000000P,L,rl3Hr 14HpcEH-cpsr!-rl3;-rl4i-pci- cpsr"-spar,User/Sy 3 ten0XD

30、0D0B3900x000000000x00008090nz cvq I FT_Abor t nzcvqj.fi;_Re3;设置军窗模式堆蝮else cpsr_cf tDadf ;L10 11 Ldr p, stactusr :谅一案 stmfd sp!rrl-rl2)(中止模式)0x000063000x00000000oxooooeoectizcvijIFt Abo fl观察r13,中止模式的堆栈地址为0x83C0ar getImageFilesCl a 写 5一M920T x Memory Start aldr0x8390&bl - Ktx -No prtfiK | rib2 -He

31、x"Mo prefix | T*b3-H*k"N。 prefixT*b1-H«x"N« prefix |Aidreas0123 | 4567e9abcdefx0000fi3900100000002000000030000000400co00XOOOOS3AOOS1000Ofiin000007on00noOE00on00KOQOOS3B3090000oo0A0000000E00oo00oc00oo00XOOO£3CO0000000000000000000000000000QQ00(未定义模式)xl3 p rl 4 ;-pc h-cpsr

32、OxQOOOOOOOX0000809B nzcvqIFt_Undef观察r13,未定义模式的堆栈地址为0x8400j-rl3OKOOOOE3DOJ40x00000000rpcxooooeoscl-cpsrnzcvgl Ft_U nde fi-spsrnicvqift_Rt3S-User/System* * J一m f uju i 4. h4stmfd apt,rl-rl2:设置菜丝模式堆栈njr cpar_e, tOxdf ; 110 11Ldr 目p.GtduJcu” ;3tmd sp,rl-rl2)AEM92DT - Memory Start addr0x83dOx|Tabi - Hen:

33、 -Mo prefix| Tab2 - Hex - Wopr e fi x |Tab3 - Hex:-Ho prefix | Tab4一 Hex 一 Nq pr e fiAddrumm011 23456 _L 7E 1 9ab cdetOxOOOQB3DO0100000002do000003000000040000000X00G0S3E0OS000000060d00口。D?000000oe00CD00OXOOOD83FO09000000OA000000OB000000oc000000DS00008400K一KGCCtTb J / 400/ jn0000J.' I.100E»r

34、00g nEStt> .ri00ESh rs1000FFl_J 1.'E"Lr00c cE8u n00mE:ett1 nTarget | Im<age | Fil«s | Class满递减模式,r1-r12压栈后,未定义模式栈顶指针为0x83d0,相距0x30,压入12个字(系统模式)p-rl3J-Z14:一.pcPpcpsrozooooeico0x00000000Dx000080A4二二k口工Ft_SY5观察r13,系统模式的堆栈地址为0x81C0卜.上工3:-rl4 kpc htpsrL-3psrS'Usee.号ymtuiL0x0000819

35、00X0(1000000DkOOOOBOAS n2CvqIFt_SYS Unavailable7Sstmld79eo* £1IILDVpc, rd ;返回5283:为各模式堆枝开薜一段隹线的字存f84stackuardtdusr stack spa tt+ (uar_al35atacksvcdcd3vc3cack3pace4(3VC_S1365Lackirqdcdirq3cack9pace4(irq_siAEM920T - Memory Start 号也也Qx8190Tabi - Max - Ha pr«£iK |Ttb2 - Hex - Ho prefix |T

36、*b3 - Hex - No prafix Tabi - Hex-Ho prsfix |Address01234s67e93t:CrdEf0x00005190 01 00 oxnonoeiAO os oo OxQOOOSIBO 09 00 oxooooeico oo oo oxoooaeioo oo oo000002ononoe00000k00000000000000000003000D00ononoo07ononnoDO0000OB00000000000000000000ooaooooooooooo04000000OS00Q000DC000000DO00000000000000Target工

37、小之辛| Filts | 口在三三满递减模式,r1-r12压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字分析快速中断FIQ模式与其他模式存入的 R1-R12有什么不同:快速中断FIQ模式中:R8R13都是0。这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问 R8-R12,快速中断模式下有自己的R8-R12。8)切换成用户模式之后还能否从用户模式切换到其他模式(如系统模式)?p cpar-spsr lUser/SvateiL答:在该例程中,nzcvqlft_7seiUnavailablehaltb halt由用户模式不可以切换到系统模式。当处理器工作在用户模式

38、时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。9)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。答:用户模式下能执行堆栈压栈操作。未压栈时:用户模式堆栈指针初始值为0X8190.i31rr13OxOOOGBlSO32"14QkQO 口 口加33一 “ptOxOOOQS04B34:-cpaTnzcvql?t_Uset* 3S=sparUnavailable-%TargetImage| FilesClass37msr cp3r_cxsffrO ; cpmr;切段到用二模式irer c.p3r_cF; 110

39、100inrs rO, Cpst3Emfd spf,rl-rl2;Rl_RI2;切拄利者理模式AEM92OT - Me®ory Start addr0x8160±1Tabi - Hex - Ho prefix 卜*bZ - Msk -No prefix | T*b3 - Bia prsfix | T*b4 - Max - No prtfix |Address01234S 670x00008160 0000000000000000000000 DO DO 0000 oa0x00002170 口口 000000000000000000 CO DO 000000000x00003

40、180 00 0C 0C 000000000000 CO CO 0000000000QK00008190 01000000020000000300000004000000压栈之后,堆栈指针减小0x30,这是因为堆栈设置为满递减模式,所以堆栈指针减小 0x30存放12个字。j-rL30x0000610-rl40x00000000Hpc0x00006050HcpsrnzcvqlFt_Use r一 apsrUnavailableUU/ted+39|itsr#0xdf ;110 11140irtscpar4142haltb halt4344initataclrmov r0,lr ;r0<相连持4

41、5Targftt | Image | Files ClassARN920T - M匿hiq” Start 窘ddr,口泅160一Tabi - Hex -Ho prsfix |nb2 -Hax -Wo prafix | H«x"Nq prefixTab4 Htx - Ho prafix |0L234 J 567B J 9abedEf0x0000816001OD 0000020000M030000000400M口 Qoxoooasi70Q5 000000600OD00070000o-o oe ooQOoaOxQOOOElSD09oo no00oa ononGOob no00no

42、 oc go00000x000081900100000002 oa000003 DO000004000000SPSR无变10)观察本程序模式切换过程中 SPSR有无变化,并解释其原因。答:模式切换过程中 SPSR无变化,因为在整个切换过程中没有异常发生,所以化。实验四ARM汇编与C混合编程实验-ARM启动过程控制实验实验目的(1)掌握建立基本完整的 ARM工程,包含启动代码,C语言程序等;(2) 了解ARM启动过程,学会编写简单的 C语言程序和汇编程序启动代码并进行调试;(3)掌握如何指定代码入口地址与入口点;(4)掌握通过 memory/register/watch/variable 窗口分

43、析判断错误。实验内容使用汇编语言编写初始化程序,并引导至C语言main函数,用汇编语言编写延时函数实现毫秒级的延时,在 C语言中调用延时函数,实现1s钟定时。实验要求(1)按照2.3节介绍的方法,在 ADS下创建一个工程 armasmc,编写3个文件,通过 AXD 运用单步执行方式进行调试程序,观察程序执行过程中的寄存器及存储器的变化情况。(2)实验过程中请记录并思考以下内容:1)如何建立异常矢量入口表?2)如何在汇编语言中切换至 C语言的main函数? 3)如何在C语言中调用汇编语言函数,并完成参数传递?4)汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的R11?5将del

44、ay.s中的R11改成R4,并将两条 R11的保护与恢复语句 stmfd sp!, "12和ldmfd sp!"11删掉,在C语言程序中的语句i-处设置端点,观察运行过程中变量i的变化情况, 并解释其中的原因。程序原代码截图:Init完成异常矢量表的建立,模式堆栈初始化,并将程序引导至C语言的main函数:NAME- entry s;Author: lihua;History: 2014-4-10IMPCRT nain :在汇编程序调用离口程序之前需要在汇编语言中使用IMPORT伪撵作来声明或匚程序area Init.code.readion 1 y entry code3

45、2m k »*»« m m h»*«« k w »»*«« Setup i n. terr up t excep t ion vectors >*« * m »»*»* m w b »*« w m h »*« u m h»startb ResBt_Handler;曲斯向量:氯1根框中断向量:我进入不同模式的中断程序Undef1ned_Hand1er b Undefined_Hand1erSVl_Han

46、dlerb SV:_HsndlerPrefeteh_hand1er AbortHandlerIRCLHandler FIQ_Handlerb Ft巳EetuhhandlErb AbortHandlernop; Reser vedvsc toh IRQ_Handlerb FIQ_H-3tiidler-e t_Handler : Rese t中 断】 bl initstack为整个中断的实际入口点.初始化备摸式下的抽栈指针;切埃至用户模式堆nsr icps jG#0xd0:110 10000 bl myitis跳转至函数haltb haltinitst*ck mov rO. Ir;r0<一l

47、:r,因为各种模式下r口是相同的而各个模式;设置管理模式堪栈nsr cpsr_c,#0Kd3;11D 1DD11idr sp,stacksvc;设置中断模式堆栈nsr cpsr_c,#Dxd2 ;11010010Idr sp,stackirq:设置快速中断模式地栈nsr cpsr_c,#0xdl;110 10001l.dr sp,stackf iq;设置中止模式堆栈nsF cpsr_c,#0nd7;110 10111Ldr sp,stackabt;设置耒定义模式堆栈jitsr cpsr_c, #0sdb ; 11011Q11Idr sp,stackund;设置系统模式堆栈msr cpsr_c.

48、JtOxdf : 11011111Idr sp? stackusrjiiov pc,rO ;返回LTORGdddddd c c c c c 0 d d d d d dstackusr stacksvc stackirq stackf iq stackabt stackundarea Interrupt READVRITE ;分配堆栈空间u -|I! 1-1 lrl-rl-il- 1Jlli:'ii srs t aclc5:pac:e space suestackspace space irqst.ackspace spsce f iqst3cks.pace space .? b t s

49、 t ac kspace spac© undsteckspace spaceendC语百程序,调用汇编语百文件 delay.s* Filesarmasme.c* Author: lihua 2014.4.10* History:ffincludeRtdic h;在汇编中对加“拉函数有声明 int main()extern void delayxms(int xms);在二程序调用该deLav引法七编程序之前需在C程序中使用FxtErn声明int 1-100;while(1):映行循环(delayxms(1QOO):1;if(i = = 0) i=100;return 0;汇编dela

50、y.s延时程序;善*署*普署善*署署善*署署售善署善篝餐善菁餐善款*普普普普普*善普留蓍善*奔善署署署署署普署善署署善善署善善*“善署普 NAME: delay. s; Author: 1ihua:History: 2014-4-10;«»*<*»-*»-*-*«*«*»*»*it*EXPORT delayMiiksarea delay,code.readon1ycode32;下面是延时若干ms的子程序 日白工包阳|名;懂用两纵循环嵌套stmfd sp,rll);sub rD,rO , Jfl ;rO=rO-lidr rll,=1000loop2sub rllH rll.11cmp rl1,#0x0tone loop2 当1 口口。威至口时,继续往下执行,否则继续lo口口2循环cmp hO . #口翼口 ;将上口后。比较bne de 1 a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论