arm汇编伪指令.课件

上传人:尘*** 文档编号:242943943 上传时间:2024-09-12 格式:PPT 页数:21 大小:176KB
返回 下载 相关 举报
arm汇编伪指令.课件_第1页
第1页 / 共21页
arm汇编伪指令.课件_第2页
第2页 / 共21页
arm汇编伪指令.课件_第3页
第3页 / 共21页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第五章基于ARM的嵌入式程序设计,5.1 ARM,汇编语言的伪操作、宏指令与伪指令,5.2 ARM,汇编语言程序设计,5.3,嵌入式,C,语言程序设计基础,5.4,嵌入式,C,语言程序设计实例,5.5 嵌入式C语言程序设计技巧,5.6 C,与汇编语言混合编程,5.1 ARM,汇编语言的伪操作、宏指令与伪指令,5.1.1,两种常见的,ARM,编译开发环境,5.1.2 ADS,编译环境下的伪操作和宏指令,5.1.3 GNU,编译环境下的伪操作和宏指令,5.1.4 ARM汇编语言的伪指令,两种常见的,ARM,编译开发环境,ADS/SDT IDE,开发环境:它由,ARM,公司开发,使用了,CodeWarrior,公司的编译器;,集成了,GNU,开发工具的,IDE,开发环境:它由,GNU,的汇编器,as,、,交叉编译器,gcc,、,和链接器,ld,等组成。,编译环境下的伪操作和宏指令,ADS,编译环境下的伪操作可分为以下几类:,符号定义(,Symbol Definition,),伪操作,数据定义(,Data Definition,),伪操作,汇编控制(,Assembly Control,),伪操作,信息报告(,Reporting,),伪操作,其他(,Miscellaneous,),伪操作,符号定义伪操作,伪操作,语法格式,作 用,GBLA,GBLA Variable,声明一个全局的算术变量,并将其初始化成0。,GBLL,GBLL Variable,声明一个全局的逻辑变量,并将其初始化成FALSE。,GBLS,GBLS Variable,声明一个全局的字符串变量,并将其初始化成空串“”。,LCLA,LCLA Variable,声明一个局部的算术变量,并将其初始化成0。,LCLL,LCLL Variable,声明一个局部的逻辑变量,并将其初始化成FALSE。,LCLS,LCLS Variable,声明一个局部的串变量,并将其初始化成空串“”。,SETA,SETA Variable expr,给一个全局或局部算术变量赋值。,SETL,SETL Variable expr,给一个全局或局部逻辑变量赋值。,SETS,SETS Variable expr,给一个全局或局部字符串变量赋值。,RLIST,name LISTlist of registers,为一个通用寄存器列表定义名称。,CN,name CN expr,为一个协处理器的寄存器定义名称。,CP,name CP expr,为一个协处理器定义名称。,DN/SN,name DN/SN expr,DN/SN为一个双精度/单精度的VFP寄存器定义名称。,FN,name FN expr,为一个FPA浮点寄存器定义名称。,数据定义伪操作,伪操作,语法格式,作 用,LTORG,LTORG,声明一个数据缓冲池(也称为文字池)的开始。,MAP,MAP expr,base-register,定义一个结构化的内存表(Storage Map)的首地址。,FIELD,label FIELD expr,定义一个结构化内存表中的数据域。,SPACE,label SPACE expr,分配一块连续内存单元,并用0初始化。,DCB,label DCB expr,expr,分配一段字节内存单元,并用expr初始化。,DCD/ DCDU,label DCD expr ,expr,分配一段字内存单元。,DCDO,label DCDO expr,expr,分配一段字对齐的字内存单元。,DCFD/ DCFDU,label DCFD Ufpliteral,fpliteral,为双精度的浮点数分配字对齐的内存单元。,DCFS/ DCFSU,label DCFS U fpliteral ,fpliteral,为单精度的浮点数分配字对齐的内存单元。,DCI,label DCI expr,expr,在ARM代码中分配一段字对齐的内存单元; 在Thumb代码中,分配一段半字对齐的半字内存单元。,DCQ/ DCQU,label DCQUliteral,literal,分配一段以双字(8个字节)为单位的内存,DCW/ DCWU,label DCWUexpr,expr,DCW用于分配一段半字对齐的半字内存单元。,汇编控制伪操作,伪操作,语法格式,作 用,IF,ELSE及ENDIF,IF logical expression,ELSE,ENDIF,能够根据条件把一段源代码包括在汇编语言程序内或者将其排除在程序之外。,WHILE及WEND,WHILE logical expression,WEND,能够根据条件重复汇编相同的一段源代码。,MACRO 、MEND及MEXIT,MACRO,$label macroname $parameter,$parameter,;宏代码,MEND,MACRO标识宏定义的开始,MEND标识宏定义的结束。MERIT用于从宏中跳转出去。用MACRO和MEND定义的一段代码,称为宏定义体。通过宏名称来调用宏。,信息报告伪操作,伪操作,语法格式,作 用,ASSERT,ASSERT logical expression,对汇编程序的第二遍扫描中,如果其中ASSERT中条件不成立,ASSERT伪操作将报告该错误信息。,INFO,INFO numeric-expression,string-expression,在汇编处理过程的第一遍扫描或者第二遍扫描时INFO伪操作报告诊断信息。,OPT,OPT n,通过OPT伪操作可以在源程序中设置列表选项。,TTL,TTL title,在列表文件的每一页的开头插入一个标题。,SUBT,SUBT subtitle,在列表文件的每一页的开头插入一个子标题。,伪操作,语法格式,作 用,CODE16,CODE16,告诉汇编编译器后面的指令序列为16位的Thumb指令,CODE32,CODE32,告诉汇编编译器后面的指令序列为32位的ARM指令。,EQU,name EQU expr,type,为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称,类似于C语言中的define宏定义。,AREA,AREA sectionname,attr,attr,定义一个代码段或者数据段。,ENTRY,ENTRY,指定程序的入口点。,END,END,告诉编译器已经到了源程序结尾。,ALIGN,ALIGN expr,offset,通过添加补丁字节使当前位置满足一定的对齐方式。,EXPORT/ GLOBAL,EXPORT symbol WEAK,声明一个符号可以被其他文件引用.,IMPORT,IMPORT symbol WEAK,告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。,EXTERN,EXTERN symbol WEAK,告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。,GET/ INCLUDE,GET filename,将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。,INCBIN,INCBIN filename,将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。,KEEP,KEEPsymbol,告诉编译器将局部符号包含在目标文件的符号表中。,NOFP,NOFP,禁止源程序中包含浮点运算指令。,REQUIRE,REQUIRE lable,指定段之间的相互依赖关系。,RN,name RN expr,为一个特定的寄存器定义名称。,ROUT,name ROUT,定义局部变量的有效范围。,5.1.3 GNU,编译环境下的伪操作和宏指令,GNU,编译环境下的伪操作可分为以下几类:,常量编译控制伪操作,汇编程序代码控制伪操作,宏及条件编译控制伪操作,其他伪操作,常量编译控制伪操作,:,伪操作,语法格式,作 用,.byte,.byte expr ,expr ,分配一段字节内存单元,并用expr初始化。,.hword/.short,.hword expr ,expr ,分配一段半字内存单元,并用expr初始化。,.ascii,.ascii expr ,expr ,定义字符串,expr,(非零结束符)。,.asciz /.string,.asciz expr ,expr ,定义字符串,expr,(以/0为结束符)。,.float/.single,.float expr ,expr ,定义一个32bit IEEE 浮点数expr。,.double,.double expr ,expr ,定义64bit IEEE浮点数expr。,word/.long /.int,.word expr ,expr ,分配一段字内存单元,并用expr初始化。,.fill,.fill repeat ,,size,value,分配一段字节内存单元,用size长度value填充repeat次。,.zero,.zero size,分配一段字节内存单元,并用0填充内存。,.space/.skip,.space size , value,分配一段内存单元,用value将内存单元初始化。,汇编程序代码控制伪操作,伪操作,语法格式,作 用,.section,.section expr,定义域中包含的段。,.text,.text subsection,将操作符开始的代码编译到代码段或代码段子段。,.data,.data subsection,将操作符开始的数据编译到数据段或数据段子段。,.bss,.bss subsection,将变量存放到.bss段或.bss段的子段。,.code 16/.thumb,.code 16,.thumb,表明当前汇编指令的指令集选择Thumb指令集。,.code 32/.arm,.code 32,.arm,表明当前汇编指令的指令集选择ARM指令集。,.end,.end,标记汇编文件的结束行,即标号后的代码不作处理。,.include,.include,“filename”,将一个源文件包含到当前源文件中。,.align/.balign,.align alignment ,fill ,max,通过添加填充字节使当前位置满足一定的对齐方式。,宏及条件编译控制伪操作,伪操作,语法格式,作 用,.macro、.,exitm及.endm,.macro acroname,parameter, parameter,.endm,.macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro及.endm定义一段代码,称为宏定义体。.exitm伪操作用于提前退出宏。,. ifdef,,.else及.endif,.ifdef condition,.else,.endif,当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。其中else可以缺省。,其他伪操作,伪操作,语法格式,作 用,.eject,.eject,在汇编符号列表文件中插入一分页符。,.list,.list,产生汇编列表(从 .list 到 .nolist)。,.nolist,.nolist,表示汇编列表结束处。,.title,.title “heading”,使用“heading ”作为标题。,.sbttl,.sbttl “heading”,使用“heading”作为子标题。,.ltorg,.ltorg,在当前段的当前地址(字对齐)产生一个文字池。,.req,.req name,expr,为一个特定的寄存器定义名称。,.err,.err,使编译时产生错误报告。,.print,.print string,打印信息到标准输出。,.fail,.fail expr,编译汇编文件时产生警告。,汇编语言的伪指令,伪指令,语法格式,作 用,ADR,ADR,cond register , expr,将基于PC或基于寄存器的地址值读取到寄存器中。小范围的地址读取。,ADRL,ADRL cond register,expr,将基于PC或基于寄存器的地址值读取到寄存器中。中等范围的地址读取。,LDR,LDR cond register,=expr | label-expr,将一个32位的立即数或者一个地址值读取到寄存器中。大范围的地址读取。,NOP,NOP,在汇编时将被替换成ARM中的空操作。,5.2 ARM,汇编语言程序设计,5.2.1 ARM汇编中的文件格式,5.2.2 ARM汇编语言语句格式,5.2.3 ARM汇编语言编程的重点,5.2.4 ARM汇编程序实例,汇编中的文件格式,ARM,源程序文件(可简称为源文件)可以由任意一种文本编辑器来编写程序代码,它一般为文本格式。在,ARM,程序设计中,常用的源文件可简单分为以下几种,:,源程序文件,文件名,说,明,汇编程序文件,*.S,用,ARM,汇编语言编写的,ARM,程序或,Thumb,程序。,C,程序文件,*.C,用,C,语言编写的程序代码。,头文件,*.H,为了简化源程序,把程序中常用到的常量命名、宏定义、数据结构定义等等单独放在一个文件中,一般称为头文件。,5.2.2 ARM,汇编语言语句格式,ARM,汇编语言语句格式如下所示:,symbol,instruction | directive | pseudo-instruction,;,comment,其中:,instruction,为指令。,directive,为伪操作。,pseudo-instruction,为伪指令。,symbol,为符号。,comment,为语句的注释。,ARM汇编语言程序格式,ARM,汇编语言是以段(,section,),为单位来组织源文件的。段是相对独立的、具有特定名称的、不可分割的指令或者数据序列。段又可以分为代码段和数据段,代码段存放执行代码,数据段存放代码运行时需要用到的数据。一个,ARM,源程序至少需要一个代码段,大的程序可以包含多个代码段和数据段。,举例说明ARM,汇编语言源程序的基本结构,AREA EXAMPLE,,,CODE,,,READONLY,ENTRY,start,MOV r0,,,#10,MOV r1,,,#3,ADD r0,,,r0,,,r1,END,本程序的程序体部分实现了一个简单的加法运算。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!