ARM嵌入式汇编语言程序设计重点.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM嵌入式汇编语言程序设计重点

ARM嵌入式汇编语言程序设计重点 实验目的 熟悉ARM微处理器指令系统; 学习ARM嵌入式汇编程序设计的编程重点。 实验设备 硬件:PC机。 软件:ADS1.2集成开发环境,Windows 2000/XP/2003。 实验内容 了解多分支程序的编写方法; 掌握ARM程序的运行和调试。 实验原理 (1)Arm 体系结构3种执行流程 1 顺序执行:在正常执行过程中,每执行一条ARM指令,程序计数器 PC 的值加4个字节;每执行一条Thumb指令,程序计数器 PC 加2个字节。整个过程按顺序执行。 2 程序可以跳转到特定的地址标号处执行,或者跳转到特定的子程序处执行。 3 在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。 BL JUMPTABLE … JUMPTABLE ADR R1,SUBTABLE CMP R0,#SUBMAX ;检查超限 BHI stop ;若超限,则程序结束 LDR PC,[R1,R0,LSL #2];否则跳转到表中 stop MOV R0,#0X18 LDR R1, 0X20026 SWI 0x123456 SUBTABLE DCD SUB0 ;子程序表入口 DCD SUB1 DCD SUB2 实验参考程序 利用跳转表实现多分支转移。 AREA JUMP,CODE,READONLY;设置本段程序的名称(JUMP)及属性 num EQU 2 ;跳转表中的子程序个数 ENTRY ;程序执行的入口点 START ;设置3个参数,然后调用子程序arithfunc,进行算术运算 MOV R0,#0 MOV R1,#3 MOV R2,#2 BL arithfunc ;调用子程序arithfunc STOP ;调用angel_SWIreason_ReportException,从应用程序中退出 MOV R0,#0X18 LDR R1, 0X20026 SWI 0x123456 arithfunc ;子程序arithfunc入口点 CMP R0,#num;判断选择子程序的参数是否在有效范围之内 MOVHS PC,LR ADR R3,JumpTable;读取跳转表的基地址 LDR PC,[R3,R0,LSL #2];根据参数R0的值跳转到相应的子程序 ;跳转表JumpTable中保存了各个子程序的地址, 在这里有两个子程序DoAdd和DoSub ;当参数R0为0时上面的代码将选择DoAdd ;当参数R0为1时上面的代码将选择DoSub JumpTable DCD DoAdd DCD DoSub DoAdd ;子程序DoAdd执行加法操作 ADD R0,R1,R2 MOV PC,LR DoSub 子程序DoSub执行减法操作 SUB R0,R1,R2 MOV PC,LR END;结束汇编 实验思考题 1. 修改下列C程序段代码为ARM汇编程序段代码。 do x--; while x 0 ; 这里设x存放在R0 中 x为无符号整数 DOWHILE_L1 ADD R0,R0,#-1 ; 循环体,x-- DOWHILE_L2 MOVS R0,R0 ; R0 R0,并影响条件码标志 BNE DOWHILE_L1 ; 若R0不为0 即x不为0 ,则继续循环 DOWHILE_END NOP 2. 编写一简单ARM汇编程序段,实现1+2+…+100的运算。 AREA EXAMPLE1, CODE,READONLY ;定义一个代码段,名称为EXAMPLE1 ENTRY ;入口 MOV R0,#0 ;给R0赋值为0 MOV R1,#0 ;用R1来存放1~100的总和,初始化为0 START ADD R0,R0,#1 ;用来判断终止的,每次加1 ADD R1,R1,R0 ;从1加到100 CMP R0,#100 ;执行R0-100的操作,但不保存,只影响CPSR的值 BLT START ;带符号数小于时跳转到START处执行 STOP B STOP ;死循环 END

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档