嵌入式系统及应用-Chapter06-汇编语言程序设计课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统及应用-Chapter06-汇编语言程序设计课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 应用 Chapter06 汇编语言 程序设计 课件
- 资源描述:
-
1、嵌入式系统及应用嵌入式系统及应用 第六章第六章 ARM汇编语言程序设计汇编语言程序设计ARM伪指令伪指令汇编程序设计汇编程序设计ARM伪指令伪指令伪指令不像机器指令那样在处理器运行期伪指令不像机器指令那样在处理器运行期间由机器执行,而是在汇编时会被合适的间由机器执行,而是在汇编时会被合适的机器指令代替机器指令代替,实现真正机器指令操作;实现真正机器指令操作;地址读取伪指令地址读取伪指令lADRADR伪指令伪指令小范围的地址读取伪指令.ADR 指令将基于 PC 相对偏移的地址值读取到寄存器中.在汇编编译源程序时,ADR伪指令被编译器替换成一条合适的指令.通常,编译器用一条ADD指令或SUB指令来
2、实现该ADR伪指令的功能;l指令格式:指令格式:ADRcond register,experADRcond register,exper地址读取伪指令地址读取伪指令lADRLADRL伪指令伪指令中等范围的地址读取伪指令.ADRL 指令将基于 PC 相对偏移的地址值或基于寄存器 相对偏移的地址值读取到寄存器中,比 ADR 伪指令可以读取更大范围的地址。在汇编编译源程序时,ADRL 伪指令被编译器替换成两个条合适的指令。l指令格式指令格式ADRLcond register,exper ADRLcond register,exper 地址读取伪指令地址读取伪指令lLDRLDR伪指令伪指令大范围的地址
3、读取伪指令.LDR 伪指令用于加载 32 位的立即数或一个地址值到指定 寄存器.l指令格式指令格式LDRcondregister,=expr/label_expr LDRcondregister,=expr/label_expr l举例举例 LDR R0,=0 x123456LDR R0,=0 x123456LDR R0,=DATA_BUFFER+0 x10LDR R0,=DATA_BUFFER+0 x10.LTORGLTORGNOP伪指令伪指令l空操作伪指令空操作伪指令,无操作,用于实现延时;无操作,用于实现延时;l举例举例DELAY1DELAY1NOPNOPNOPNOPNOPNOPSUBS
4、 R1,R1,#1SUBS R1,R1,#1BNE DELAY1 BNE DELAY1 变量定义伪指令变量定义伪指令l全局变量声明全局变量声明GBLA variable:全局数值变量GBLL variable:全局逻辑变量GBLS variable:全局字符串变量l局部变量声明局部变量声明LBLA variable:局部数值变量LBLL variable:局部逻辑变量LBLS variable:局部字符串变量变量赋值伪指令变量赋值伪指令l给变量复制:给变量复制:SETA 伪指令用于给一个全局/局部的算术变量赋值.SETL 伪指令用于给一个全局/局部的逻辑变量赋值.SETS 伪指令用于给一个全局
5、/局部的字符串变量赋值.变量定义变量定义/赋值伪指令举例赋值伪指令举例GBLL CodeDbgGBLL CodeDbgCodeDbg SETL TRUECodeDbg SETL TRUE.GBLA ByteNoGBLA ByteNoByteNo SETA 8ByteNo SETA 8.GBLS ErrStrGBLS ErrStrErrStr SETS No semaphone.ErrStr SETS No semaphone.RLIST伪指令伪指令 RLIST RLIST 为一个通用寄存器列表定义名称:为一个通用寄存器列表定义名称:name RLIST reglistname RLIST re
6、glist 举例:举例:LoReg RLIST R0-R7LoReg RLIST R0-R7数据定义伪指令数据定义伪指令 数据定义伪指令用于数据表定义数据定义伪指令用于数据表定义,文字池定文字池定义义,数据空间分配等:数据空间分配等:声明一个文字池:声明一个文字池:LTORG LTORG 分配一块内存空间分配一块内存空间,并用并用0 0初始化初始化:SPACE:SPACE分配一段字节的内存单元分配一段字节的内存单元,并用指定的数据并用指定的数据初始化:初始化:DCB DCB 分配一段字的内存单元分配一段字的内存单元,并用指令的数据初并用指令的数据初始化:始化:DCD DCD 和和 DCDU D
7、CDU LTORG伪指令伪指令 LTORG LTORG 用于声明一个文字池用于声明一个文字池(literal-(literal-pool),pool),在使用在使用 LDR LDR 伪指令时伪指令时,要在适当的要在适当的地址加入地址加入 LTORG LTORG 声明声明 文字池文字池,这样就会把这样就会把要加载的数据保存在文字池内要加载的数据保存在文字池内,再用再用 ARM ARM 的加载指令读出数据:的加载指令读出数据:LTORGLTORG 举例:举例:LDR R0,=0 x12345678LDR R0,=0 x12345678ADD R1,R1,R0ADD R1,R1,R0MOV PC,L
8、RMOV PC,LRLTORGLTORGSPACE伪指令伪指令 SPACE SPACE 用于分配一块内存单元用于分配一块内存单元,并用并用 0 0 初初始化始化.%.%与与 SPACE SPACE 同义:同义:label SPACE exprlabel SPACE expr 举例:举例:DataBuf SPACE 1000DataBuf SPACE 1000;分配分配10001000字节字节DCB伪指令伪指令 DCB DCB 用于分配一段字节内存单元用于分配一段字节内存单元,并用伪指并用伪指令中的令中的 expr expr 初始化初始化.一般可用来定义数一般可用来定义数 据表格据表格,或文字符
9、串或文字符串.=.=与与 DCB DCB 同义:同义:label DCB expr,expr,expr.label DCB expr,expr,expr.举例:举例:DISPTAB DISPTAB DCB 0 x33,0 x43,0 x53DCB 0 x33,0 x43,0 x53DCB 0 x10,0 x20,0 x30DCB 0 x10,0 x20,0 x30ERRSTR ERRSTR DCB Send data error.,0DCB Send data error.,0DCD伪指令伪指令 DCDDCD用于分配一段字内存单元用于分配一段字内存单元,并用伪指令并用伪指令中的中的exprex
10、pr初始化初始化.&.&与与 DCD DCD 同义:同义:label DCD expr,expr,exprlabel DCD expr,expr,expr 举例:举例:VectorsVectorsLDR PC,ResetAddrLDR PC,ResetAddrLDR PC,UndefinedAddrLDR PC,UndefinedAddrResetAddrResetAddrDCDDCD ResetResetUndefinedAddr DCD UndefinedUndefinedAddr DCD UndefinedResetReset.汇编控制伪指令汇编控制伪指令 汇编控制伪指令用于条件汇编汇编
11、控制伪指令用于条件汇编,宏定义宏定义,重重复汇编控制等:复汇编控制等:条件汇编控制条件汇编控制:IF,ELSE:IF,ELSE 和和 ENDIF ENDIF 宏定义宏定义:MACRO:MACRO 和和 MEND MEND 重复汇编重复汇编:WHILE:WHILE 及及 WEND WEND IF、ELSE和和ENDIF伪指令伪指令 IF,ELSEIF,ELSE和和ENDIF ENDIF 伪指令能够根据条件把一伪指令能够根据条件把一段代码包括在汇编程序内或将其排除段代码包括在汇编程序内或将其排除 在程在程序之外:序之外:IF logical_expr IF logical_expr.ELSEELS
12、E.ENDIF ENDIF MACRO和和MEND伪指令伪指令 MACRO MACRO 和和 MEND MEND 伪指令用于宏定义伪指令用于宏定义.MACRO.MACRO 标识宏定义的开始标识宏定义的开始,MEND,MEND 标识宏定义久的标识宏定义久的 结束结束.用用MACROMACRO及及MENDMEND定义的一段代码定义的一段代码,称为称为宏定义体:宏定义体:MACROMACRO$label$label macroname para1para2macroname para1para2;宏体定义宏体定义MENDMENDMACRO和和MEND伪指令伪指令 举例:举例:MCAROMCARO$I
13、RQ_Label$IRQ_LabelHANDLERHANDLER$IRQ_Exception$IRQ_ExceptionEXPORT$IRQ_LableEXPORT$IRQ_LableIMPORT$IRQ_ExceptionIMPORT$IRQ_Exception$IRQ_Lable$IRQ_LableSUB LR,LR,#4SUB LR,LR,#4STMFD SP!,R0-R3,R12,LRSTMFD SP!,R0-R3,R12,LRMRS R3,STSRMRS R3,STSRSTMFD SP!,R3STMFD SP!,R3.MENDMENDDCD伪指令伪指令lWHILE WHILE 和和
14、WEND WEND 伪指令用于根据条件重复伪指令用于根据条件重复汇编相同的或几乎相同的一段源程序:汇编相同的或几乎相同的一段源程序:WHILE logical_exprWHILE logical_expr WENDWENDl举例:举例:WHILE no 5WHILE no 5no SETA no+1no SETA no+1.WENDWEND杂项伪指令杂项伪指令l边界对齐边界对齐:ALIGN:ALIGNl段定义段定义:AREA:AREAl指令集定义指令集定义:CODE16:CODE16 和和 CODE32 CODE32 l汇编结束汇编结束:END:END l程序入口程序入口:ENTRY:ENTR
15、Y l常量定义常量定义:EQU:EQU l声明符号可以被外部引用声明符号可以被外部引用:EXPORT:EXPORT和和GLORBAL GLORBAL l声明一个外部符号声明一个外部符号:IMPORT:IMPORT 和和 EXTERN EXTERN l包含文件包含文件:GET:GET 和和 INCLUDE INCLUDE l包含不被汇编的文件包含不被汇编的文件:INCBIN :INCBIN ALIGN伪指令伪指令lALIGN ALIGN 伪指令通过添加补丁字节使当前位伪指令通过添加补丁字节使当前位置满足一定的对齐方式:置满足一定的对齐方式:ALIGN exprALIGN exprl举例:举例:.
展开阅读全文