ImageVerifierCode 换一换
格式:PPT , 页数:62 ,大小:277.50KB ,
资源ID:13338863      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13338863.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(第四章.嵌入式教案.ppt)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第四章.嵌入式教案.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样

2、式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第四章 ARM汇编程序设计,了解与熟悉,ADS,下的伪操作和宏指令以及它的应用,熟悉,ARM ATPCS,能够利用汇编语言进行简单的程序设计,1.,伪指令、伪操作和宏指令概念,伪指令,汇编时被合适的机器指令替代。,伪操作,在汇编过程起作用,不参与程序运行。,宏指令,通过伪操作定义的一段独立的代码。在调用它时将宏体插入到源程序中。,4.1.,汇编伪指令和宏指令,2.ARM

3、汇编伪指令,ARM,伪指令,不属于,ARM,指令集中的指令,,是为了编程方便而定义的。伪指令可以像其它,ARM,指令一样使用,但在编译时这些指令将被等效的,ARM,指令代替。,ARM,伪指令有四条,分别是:,ADR,:小范围的地址读取伪指令。,ADRL,:中等范围的地址读取伪指令。,LDR,:大范围的地址读取伪指令。,LDRcond register,=,expr,NOP,:空操作伪指令。,(1)ADR小范围的地址读取,ADR伪指令功能:,将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。,ADR伪指令功能的实现方法:,在汇编编译器编译源程序时,ADR伪指令被编译器替换成

4、一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现此ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,语法格式:,ADRcond register,expr,其中:,register:加载的目标寄存器。,expr:地址表达式。取值范围是参考P212,例,1,:,(0 x20),ADR R1,Delay,Delay,(0 x64),MOV R0,R14,使用,ADR,将程序标号,Delay,所表示的地址存入,R1,。,编译后的反汇编代码:,ADD R1,PC,#0 x3C,MOV R0,R14,PC+0 x3C,=0 x20+0 x08+0 x3C,=0 x64,例,

5、2,:查表,ADR R0,D_TAB ;,加载转换表地址,LDRB R1,R0,R2 ;,使用,R2,作为参数,进行查表,D_TAB,DCB 0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,(,2,),ADRL,中等范围的地址读取,ADRL,伪指令功能:,将基于,PC,相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比,ADR,伪指令可以读取更大范围的地址。,ADRL,伪指令功能实现方法:,在汇编编译器编译源程序时,,ADRL,被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。,语法格式:,ADRLcond register,expr

6、其中:,register,:加载的目标寄存器。,expr,:地址表达式。取值范围参考,P212,例,3,:,(0 x20),ADRL R1,Delay,Delay,(0 x64),MOV R0,R14,使用,ADRL,将程序标号,Delay,所表示的地址存入,R1,。,编译后的反汇编代码:,ADD R1,PC,#0 x3C,ADD R1,R1,#0,MOV R0,R14,ADRL,伪指令被汇编成两条指令,尽管第,2,条指令并没有意义。,(,3,),LDR,大范围的地址读取,LDR,伪指令功能:,用于加载,32,位立即数或一个地址值到指定的寄存器。,LDR,伪指令功能实现方法:,在汇编编译源程

7、序时,,LDR,伪指令被编译器替换成一条合适的指令。,若,加载的常数未超过,MOV,或,MVN,的范围,则使用,MOV,或,MVN,指令代替该,LDR,伪指令;,否则,汇编器将常量放入文字池,并使用一条程序相对偏移的,LDR,指令从文字池读出常量。,语法格式:,LDRcond register,=,expr,其中:,Register,:加载的目标寄存器。,expr,:,32,位常量或地址表达式。,注意:,从指令位置到文字池的偏移量必须小于,4KB,。,与,ARM,指令的,LDR,的区别:伪指令,LDR,的参数有“,=”,号。,例,4,:,(0 x060),LDR R1,=Delay,Delay

8、0 x102),MOV R0,R14,使用,LDR,将程序标号,Delay,所表示的地址存入,R1,。,编译后的反汇编代码:,LDR R1,stack,Delay,MOV R0,R14,LTORG,stack DCD 0 x102,LDR,伪指令被汇编成一条,LDR,指令,并在文字池中定义一个常量,该常量为标号,Delay,的地址。,(,4,),NOP,空操作伪指令,NOP,伪指令功能实现方法:,在汇编时将被替代成,ARM,中的空操作,比如可能是“,MOV R0,R0”,指令等。,用途:,NOP,可用于延时操作。,语法格式:,NOP,例:延时子程序,Delay,NOP ;,空操作,NOP,

9、NOP,SUBS R1,R1,#1 ;,循环次数减,1,BNE Delay,MOV PC,LR,3.ARM,汇编伪操作,ADS,编译环境下的伪操作可分为以下几类:,符号定义,(,Symbol Definition,)伪操作,数据定义,(,Data Definition,)伪操作,汇编控制,(,Assembly Control,)伪操作,其它,(,Miscellaneous,)伪操作,(1),符号定义伪操作,GBLA,,,GBLL,,,GBLS,:声明全局变量。,LCLA,,,LCLL,,,LCLS,:声明局部变量。,SETA,,,SETL,,,SETS,:给变量赋值。,RLIST,:为通用寄存

10、器列表定义名称。,(2),数据定义伪操作,LTORG,:声明一个数据缓冲池的开始,SPACE,:分配一块字节内存单元,并用,0,初始化,DCB,:分配一段字节内存单元,并初始化,DCD,、,DCDU,:分配一段字内存单元,并初始化,MAP,:定义一个结构化的内存表的首地址,FIELD,:定义结构化内存表中的一个数据域,MAP,、,FIELD,、,SPACE,MAP 0 x100,,,R0,;定义结构化内存表首地址的值为,0 x100,R0,A FIELD 16,;定义,A,的长度为,16,字节,位置为,0 x110+R0,LTORG ;,定义数据缓冲池,&0 x8000,Data SPACE

11、4200;,从当前位置开始分配,4200,字节的内存单元,并初始化为,0,。,LTORG,用于声明一个数据缓冲池(文字池)的开始。,语法格式:,LTORG,例:start BL func;,func LDR R1,=0 x8000 ;子程序,MOV PC,LR ;子程序返回,LTORG,;定义数据缓冲池&0 x8000,Data SPACE 4200 ;从当前位置开始分配4200字节的内,存单元,并初始化为0。,END,默认数据缓冲池为空,注意:,LTORG伪操作通常放在无条件跳转指令之后,或者子程序返回指令之后,这样处理器不会错误地将数据缓冲池中的数据当作指令来执行。,通常ARM汇编编译器把

12、数据缓冲池放在代码段的最后面,即下一个代码段开始之前,或者END伪操作之前。,DCB也可以用符号”=”表示,用于定义并且初始化一个或者多个字节的内存区域。,语法格式:,label DCB expr,expr,或,label =expr,expr,其中expr表示:,-128到255之间的一个数值常量或者表达式。,一个字符串。,注意:,当DCB后面紧跟一个指令时,可能需要使用ALIGN确保指令是字对齐的。,例:,short DCB 1 ;,为,short,分配了一个字节,并初始化为,1,。,string DCB “string”,0 ;,构造一个以,0,结尾的字符串,DCD、DCDU分配一段字内

13、存单元,(1)DCD 分配一段字对齐的内存单元,用于分配一段字对齐的内存单元,并初始化。DCD,也可以用符号”&”表示,语法格式:,label DCD expr,expr,或,label&expr,expr,其中:,expr:数字表达式或程序中的标号。,注意:,DCD伪操作可能在分配的第一个内存单元前插入填补字节以保证分配的内存是字对齐的。,例:,data1 DCD 2,4,6 ;为data1分配三个字,内容初始化为2,4,6,data2 DCD label+4 ;初始化data2为label+4对应的地址,(2)DCDU 分配一段字非严格对齐的内存单元,DCDU与DCD的不同之处在于DCDU

14、分配的内存单元并不严格字对齐。,(,3,)汇编控制伪操作,IF,ELSE,及,ENDIF,:有条件选择汇编,WHILE,及,WEND,:有条件循环(重复)汇编,MACRO,MEND,及,MEXIT,:宏定义汇编,(,4,)其它伪操作,AREA:,定义一个代码段或数据段,CODE16、CODE32:,告诉编译器后面的指令序列位数,ENTRY:,指定程序的入口点,ALIGN:,将当前的位置以某种形式对齐,END:,源程序结尾,EQU:,为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。,EXPORT、GLOBAL:,声明源文件中的符号可以被其他源文件引用,IMPORT、EXTERN:,声明

15、某符号是在其他源文件中定义的,GET、INCLUDE:,将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。,INCBIN:,将一个文件包含到当前源文件中,而被包含的文件不进行汇编处理,1,),AREA,用于定义一个代码段或是数据段。,语法格式:,AREA sectionname,attr,attr,其中:,sectionname,:为所定义的段的名称。,attr,:该段的属性。具有的属性为:,CODE,:,定义代码段。,DATA,:,定义数据段。,READONLY,:,指定本段为只读,代码段的默认属性。,READWRITE,:,指定本段为可读可写,数据段的默认属性。,A

16、LIGN,:,指定段的对齐方式为,2,expression,。,expression,的取值为,031,。,COMMON,:,指定一个通用段。该段不包含任何用户代码和数据。,NOINIT,:,指定此数据段仅仅保留了内存单元,而没有将各初始值写入内存单元,或者将各个内存单元值初始化为,0,。,注意:,一个大的程序可包含多个代码段和数据段。一个汇编程序至少包含一个代码段。,2,),CODE16,和,CODE32,CODE16,告诉汇编编译器后面的指令序列为,16,位的,Thumb,指令。,CODE32,告诉汇编编译器后面的指令序列为,32,位的,ARM,指令。,语法格式:,CODE16,CODE3

17、2,注意:,CODE16,和,CODE32,只是告诉编译器后面指令的类型,该伪操作本身不进行程序状态的切换。,例:,AREA ChangeState,CODE,READONLY,ENTRY,CODE32,;,下面为,32,位,ARM,指令,LDR R0,=start+1,BX R0,CODE16,;,下面为,16,位,Thumb,指令,start MOV R1,#10,.,END,;,切换到,Thumb,状态,并跳转到,start,处执行,3,),ENTRY,指定程序的入口点。,语法格式:,ENTRY,注意:,一个程序(可包含多个源文件)中至少要有一个,ENTRY,(可以有多个,ENTRY,)

18、但一个源文件中最多只能有一个,ENTRY,(可以没有,ENTRY,),4,),ALIGN,ALIGN,伪操作通过填充,0,将当前的位置以某种形式对齐。,语法格式:,ALIGN expr,offset,其中:,expr,:一个数字,表示对齐的单位。这个数字是,2,的整数次幂,范围在,2,0,2,31,之间。,如果没有指定,expr,,则当前位置对齐到下一个字边界处,。,Offset,:偏移量,可以为常数或数值表达式。,不指定,offset,表示将当前位置对齐到以,expr,为单位的起始位置。,例,1,:,short DCB 1 ;,本操作使字对齐被破坏,ALIGN ;,重新使其为字对齐,MOV

19、 R0,1,例,2,:,ALIGN 8 ;,当前位置以,2,个字的方式对齐,5,),END,END,伪操作告诉编译器已经到了源程序结尾。,语法格式:,END,注意:,每一个汇编源程序都必须包含,END,伪操作,以表明本源程序的结束。,6)EQU,EQU伪操作,为数字常量、基于寄存器的值和程序中的标号定义一个字符名称,。,语法格式:,name EQU expr,type,其中:,name:为expr定义的字符名称。,expr:基于寄存器的地址值、程序中的标号、32位的地址常量或者32位的常量。,表达式,为常量。,type:当expr为32位常量时,可以使用type指示expr的数据的类型。取值为

20、CODE32,CODE16,DATA,例:,abcd EQU 2 ;,定义,abcd,符号的值为,2,abcd EQU label+16,;,定义,abcd,符号的值为,(label+16),abcd EQU 0 x1c,CODE32,;,定义,abcd,符号的值为绝对地址,;,值,0 x1c,,而且此处为,ARM,指令,7,),EXPORT,及,GLOBAL,声明一个源文件中的符号,使此符号可以被其他源文件引用。,语法格式:,EXPORT/GLOBAL symbol weak,其中:,symbol,:声明的符号的名称。(区分大小写),weak,:声明其他同名符号优先于本符号被引用。,例:

21、AREA example,,,CODE,,,READONLY,EXPORT,DoAdd,DoAdd ADD R0,,,R0,,,R1,8,),IMPORT,及,EXTERN,声明一个符号是在其他源文件中定义的。,语法格式:,IMPORT symbolweak,EXTERN symbolweak,其中:,symbol,:声明的符号的名称。,weak,:,当没有指定此项时,如果,symbol,在所有的源文件中都没有被定义,则连接器会报告错误。,当指定此项时,如果,symbol,在所有的源文件中都没有被定义,则连接器不会报告错误,而是进行下面的操作。,如果该符号被,B,或者,BL,指令引用,则该符

22、号被设置成下一条指令的地址,该,B,或,BL,指令相当于一条,NOP,指令。,其他情况下此符号被设置成,0,。,9,),GET,及,INCLUDE,将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。,指令格式:,GET filename,INCLUDE filename,其中,:,filename:,包含的源文件名,可以使用路径信息(可包含空格)。,例:,GET d:armfile.s,10,),INCBIN,将一个文件包含到当前源文件中,而被包含的文件不进行汇编处理,指令格式:,INCBIN filename,其中:,filename,:被包含的文件名称,可使用路径信

23、息(不能有空格)。,适用情况:,通常使用此伪操作将一个可执行文件或者任意数据包含到当前文件中。,例:,INCBIN d:armfile.txt,4.,ARM ATPCS,ATPCS(,ARM-THUMB procedure call standard,),就是ARM程序和Thumb程序中子程序调用的基本规则。ATPCS规定了一些子程序间调用的基本规则。,子程序调用过程中寄存器的使用规则,数据栈的使用规则,参数的传递规则。,2026/3/4 周三,相对于其他类型的ATPCS,满足基本ATPCS的程序的执行速度更快,所占用的内存更少。,它不能提供以下的支持:,1)ARM程序和Thumb程序相互调用

24、2)数据以及代码的位置无关的支持;,3)子程序的可重入性;,4)数据栈检查的支持。,2026/3/4 周三,1)寄存器的使用规则,寄存器的使用必须满足下面的规则:,子程序间通过寄存器 R0一R3来传递参数,在子程序中,使用寄存器R4R11来保存局部变量,寄存器R12用作子程序间scratch寄存器(用于保存SP,在函数返回时使用该寄存器出栈),记作ip。在子程序间的连接代码段中常有这种使用规则。,2026/3/4 周三,寄存器R13用作数据栈指针,记作sp。,寄存器R14称为连接寄存器,记作lr。,寄存器R15是程序计数器,记作pc。它不能用作其他用途。,2026/3/4 周三,ATPCS

25、中各寄存器的使用规则及其名称,2026/3/4 周三,2)数据栈使用规则,栈指针通常可以指向不同的位置。当栈指针指向栈顶元素(即最后一个入栈的数据元素)时,称为FULL栈;当栈指针指向与栈顶元素(即最后一个入栈的数据元素)相邻的一个可用数据单元时,称为EMPTY栈。,数据栈的增长方向也可以不同。当数据栈向内存地址减小的方向增长时,称为DESCENDING栈,当数据栈向内存地址增加的方向增长时,称为ASCENDING栈。,2026/3/4 周三,综合这两种特点可以有以下4种数据栈。,FD Full Descending,ED Empty Descending,FA Full Ascending,

26、EA Empty Ascending,ATPCS规定数据栈为FD类型,并且对数据栈的操作是8字节对齐的。,2026/3/4 周三,3)数传递规则,(1)参数个数可变的子程序参数传递规则:,对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0R3来传递参数;当参数超过4个时,还可以使用数据栈来传递参数。,在参数传递时,将所有参数看作是存放在连续的内存字单元中的宇数据。然后,依次将各字数据传送到寄存器R0、Rl、R2、R3中,如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈。,2026/3/4 周三,(,2)参数个数固定的子程序参数传递规

27、则,对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同。如果系统包含浮点运算的硬件部件,浮点参数将按照下面的规则传递:,各个浮点参数按顺序处理。,为每个浮点参数分配FP寄存器。,分配的方法是,满足该浮点参数需要的且编号最小的一组连续的FP寄存器。,第一个整数参数,通过寄存器R0R3来传递。其他参数通过数据栈传递。,2026/3/4 周三,(3)子程序结果返回规则,结果为一个32位的整数时,可以通过寄存器R0返回。,结果为一个64位整数时,可以通过寄存器R0和R1返回,依次类推。,结果为一个浮点数时,可以通过浮点运算部件的寄存器f0、d0或者s0来返回。,结果为复合型的浮点

28、数(如复数)时,可以通过寄存铅f0fn或者d0dn来返回。,对于位数更多的结果,需要通过内存来传递。,2026/3/4 周三,2.ARM和Thumb程序混合使用,在编译和汇编时,使用/interwork告诉编译器生成的目标代码遵守支持ARM程序和Thumb程序混合使用的ATPCS。它用在以下场合:,1)程序中存在ARM程序调用Thumb程序的情况。,2)程序中存在Thumb程序调用ARM程序的情况。,3)需要连接器来进行ARM状态和Thumb状态切换的情况。,2026/3/4 周三,例如:进行状态切换的汇编程序,ARM,ADR r0,ThumbProg+1,BX r0 ;跳到ThumbProg

29、程序切换到Thumb状志,THUMB ;THUMB指示编译器后面的为Thumb指令,ThumbProg:,.,ADR r0,ARMProg,BX r0 ;跳转到ARMProg,程序切换到ARM状态,ARM ;ARM指示编译器后面的为ARM指令,ARMProg:,MOV r4,#4,4.,ARM,程序设计,.ARM,汇编语言程序设计,ARM,汇编语言以段(,section,)为单位组织源文件。,段是相对独立的、具有特定名称的、不可分割的指令或数据序列。,段又可以分为,代码段和数据段,,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个,ARM,源程序至少需要一个代码段,大的程序可以包

30、含多个代码段和数据段。,)ARM汇编中的文件格式,ARM源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。在ARM程序设计中,常用的源文件可简单分为以下几种.,2)ARM汇编语言语句格式,ARM汇编语言语句格式如下所示:,symbol instruction|directive|pseudo-instruction;comment,其中:,instruction,为指令。,directive,为伪操作。,pseudo-instrkeuction,为伪指令。,symbol,为符号。,comment,为语句的注释。,ARM,汇编语言中,符号可代表地址、变量和数字

31、常量。数字常量一般有,3,种表达方式:,十进制数,,如,79,、,4,等。,十六进制数,,以,0 x,和,&,开头,如,0 x345,、,0 xFB,。,n,进制数,,用,n_XXX,表示,如,2_01100101,、,8_5642,。,标号:表示程序中的指令或数据地址的符号,代表地址。,局部标号:主要用于局部范围代码。,)ARM汇编语言程序格式,ADS环境下ARM汇编语言源程序的基本结构:,AREA EXAMPLE,CODE,READONLY,ENTRY,start,MOV r0,#10,MOV r1,,,#3,ADD r0,,,r0,,,r1,END,上述程序的程序体部分实现了一个简单的加

32、法运算。,2.ARM,汇编语言程序实例,下面的汇编语言设计的程序是针对某一开发板的,LED,控制器的设计程序,利用,B,口的,7,10,四个,I/O,端口做输出,控制四个,LED,的发光。利用,ADS,编译生成,asm.bin,。,;汇编指令实验,;定义端口B寄存器预定义,rPCONB,EQU,0 x56000010,rPDATB,EQU,0 x56000014,rPUPB,EQU,0 x56000018 ;,禁止,PORT B,上拉,AREA,Init,CODE,READONLY,;,该伪指令定义了一个代码段,段名为,Init,,属性只读,ENTRY,;,程序的入口点标识,ResetEntr

33、y,;下面这三条语句,主要是用来设置I/O口GPB7为输出属性,ldr r0,=rPCONB ;将寄存器rPCONB的地址存放到寄存器r0中,ldr r1,=0 x154000,str r1,r0 ;将r1中的数据存放到寄存器rPCONB中,;下面这三条语句,主要是禁止GPB端口的上拉电阻,ldr r0,=rPUPB,ldr r1,=0 xffff,str,r1,r0,ldr,r2,=rPDATB ;,将数据端口,E,的数据寄存器的地址附给寄存器,r2,ledloop,ldr r1,=0 x700,str r1,r2 ;,使,GPB7,输出低电平,,LED1,会亮,bl delay ;,调用延

34、迟子程序,ldr r1,=0 x680 ;,使,GPB8,输出低电平,,LED2,会亮,str r1,r2,bl delay,ldr r1,=0 x580 ;,使,GPB9,输出低电平,,LED3,会亮,str r1,r2,bl delay,ldr r1,=0 x380 ;,使,GPB10,输出低电平,,LED4,会亮,str r1,r2,bl delay,b ledloop ;不断的循环,下面是延迟子程序,delay,ldr r3,=0 xffffff ;,设置延迟的时间,delay1,sub r3,r3,#1 ;r3=r3-1,cmp r3,#0 x0 ;,将,r3,的值与,0,相比较,bne delay1 ;,比较的结果不为,0,(,r3,不为,0,),继续调用,delay1,否则执行下一条语句,mov pc,lr ;,返回,END ;,程序结束符,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服