ARM汇编语言程序设计基础

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2022/3/22
分配一段内存单元,用value将内存单元初始化。
12
汇编程序代码控制伪操作
伪操作
语法格式
作用
.section
.section expr
定义域中包含的段。
.text
.text {subsection} 将操作符开始的代码编译到代码段或代码段子段。
.data
.data {subsection} 将操作符开始的数据编译到数据段或数据段子段。
{ label } DCDO expr { , expr}… {label} DCFD {U}fpliteral {,fpliteral}… {label} DCFS {U} fpliteral {,fpliteral}… {label} DCI expr { , expr}…
{label} DCQ{U}{﹣} literal{,{﹣}literal}…
{label} DCW{U}expr{, expr}…
作用
声明一个数据缓冲池(也称为文字池)的开始。
定义一个结构化的内存表(Storage Map)的首地址。
定义一个结构化内存表中的数据域。 分配一块连续内存单元,并用0初始化。 分配一段字节内存单元,并用expr初始化。 分配一段字内存单元。 分配一段字对齐的字内存单元。 为双精度的浮点数分配字对齐的内存单元。 为单精度的浮点数分配字对齐的内存单元。
数 据 定 义 伪 操 作
在ARM代码中分配一段字对齐的内存单元; 在Thumb代码中, 分配一段半字对齐的半字内存单元。
分配一段以双字(8个字节)为单位的内存
DCW用于分配一段半字对齐的半字内存单元。
汇编控制伪操作
伪操作
语法格式
作用
IF,ELSE IF logical expression 及ENDIF …
CP
name CP expr
为一个协处理器定义名称。
DN/SN
name DN/SN expr
2022/3/22
FN
name FN expr
DN/SN为一个双精度/单精度的VFP寄存器定义名称。 5
为一个FPA浮点寄存器定义名称。
伪操作
LTORG
MAP
FIELD
SPACE
DCB
DCD/ DCDU
DCDO
{$label} macroname {$parameter{,
MEND标识宏定义的结束。MERIT 用于从宏中跳转出去。用MACRO
$parameter}…}
和MEND定义的一段代码,称为宏

;宏代码
定义体。通过宏名称来调用宏。
MEND
信息报告伪操作
伪操作
语法格式
作用
ASSERT
INFO OPT
DCFD/ DCFDU DCFS/ DCFSU
DCI
DCQ/ DCQU DCW/ DCWU
语法格式
LTORG
MAP expr{,base-register}
{label} FIELD expr
{label} SPACE expr
{label} DCB expr{,expr}
{label} DCD expr {,expr}…
IMPORT
EXTERN
GET/ INCLUDE
INCBIN KEEP NOFP
REQUIRE
RN ROUT
CODE16
语法格式
CODE32
name EQU expr{,type}
AREA attr}…
ENTRY
sectionname { , attr } { ,
END
ALIGN {expr{,offset}}
ADS汇编的语法规则
所有标号必须在一行的顶格书写,后 面不要加冒号(:) 所有的指令均不能顶格书写 大小写敏感(可以全部大写或全部小 写,但不能大小写混合使用) 注释使用分号(;)
2022/3/22
10
GNU编译环境下的伪操作和宏指令(重点)
GNU编译环境下的伪操作可分为以下几类: 常量编译控制伪操作 汇编程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作
2022/3/22
3
ADS编译环境下的伪操作和宏指令
ADS编译环境下的伪操作可分为以下几类:
符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作
SETL
SETL Variable expr
给一个全局或局部逻辑变量赋值。
SETS
SETS Variable expr
给一个全局或局部字符串变量赋值。
RLIST
Name RLIST{list of registers} 为一个通用寄存器列表定义名称。
CN
name CN expr
为一个协处理器的寄存器定义名称。
分配一段字节内存单元,并用expr初始化。 分配一段半字内存单元,并用expr初始化。 定义字符串expr(非零结束符)。 定义字符串expr(以/0为结束符)。 定义一个32bit IEEE 浮点数expr。 定义64bit IEEE浮点数expr。
.word/.long /.int
.fill
.zero
EXPORT symbol {[WEAK]}
IMPORT symbol {[WEAK]}
EXTERN symbol {〔WEAK〕}
GET filename
INCBIN filename KEEP{symbol} NOFP REQUIRE lable name RN expr {name} ROUT
2022/3/22
2
两种常见的ARM编译开发环境
ADS/SDT IDE开发环境:它由ARM公司开发, 使用了CodeWarrior公司的编译器; 集成了GNU开发工具的IDE开发环境:它由 GNU的汇编器as、交叉编译器gcc、和链接 器ld等组成。
➢ 本课程实验使用 Embest IDE for ARM
.word expr {,expr} … 分配一段字内存单元,并用expr初始化。
.fill repeat {,size}{, value}
.zero size
分配一段字节内存单元,用size长度value填充 repeat次。
分配一段字节内存单元,并用0填充内存。
.space/.skip .space size {, value}
ASSERT expression
logical 对 汇 编 程 序 的 第 二 遍 扫 描 中 , 如 果 其 中 ASSERT中条件不成立,ASSERT伪操作将报 告该错误信息。
INFO expression expression OPT n
numeric, string-
在汇编处理过程的第一遍扫描或者第二遍扫 描时INFO伪操作报告诊断信息。
{ELSE …}
ENDIF WHILE 及 WHILE logical expression WEND …
WEND
能够根据条件把一段源代码包括在 汇编语言程序内或者将其排除在程 序之外。
能够根据条件重复汇编相同的一段 源代码。
MACRO 、MACRO
MACRO 标 识 宏 定 义 的 开 始 ,
MEND 及 MEXIT
ARM汇编语言程序设计基础
1 ARM汇编语言的伪操作、宏指令与伪指 令 2 ARM汇编语言程序设计 3 嵌入式C语言程序设计基础 4 嵌入式C语言程序设计技巧 5 C与汇编语言混合编程
2022/3/22
1
1 ARM汇编语言的伪操作、宏指令与伪指令
两种常见的ARM编译开发环境 ADS编译环境下的伪操作和宏指令 GNU编译环境下的伪操作和宏指令 ARM汇编语言的伪指令
通过OPT伪操作可以在源程序中设置列表选项。
TTL
TTL title
在列表文件的每一页的开头插入一个标题。
SUBT SUBT subtitle
2022/3/22
在列表文件的每一页的开头插入一个子标题。
8
伪操作
CODE16
CODE32 EQU AREA ENTRY END ALIGN
EXPORT/ GLOBAL
标记汇编文件的结束行,即标号后的代码不作处理。
.include
.include “filename” 将一个源文件包含到当前源文件中。
.align/.balign
Align {alignment} 通过添加填充字节使当前位置满足一定的对齐方式。 {,fill} {,max}
2022/3/22
13
宏及条件编译控制伪操作
当满足某条件时对一组语句进行编 译,而当条件不满足时则编译另一 组语句。其中else可以缺省。
14
其他伪操作
伪操作 语法格式
.eject .eject
.list
.list
.nolist .nolist
.title .title “heading”
.sbttl .sbttl “heading”
.ltorg .ltorg
作用
告诉汇编编译器后面的指令序列为16位的Thumb指令
告诉汇编编译器后面的指令序列为32位的ARM指令。
为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。
定义一个代码段或者数据段。
指定程序的入口点。 告诉编译器已经到了源程序结尾。 通过添加补丁字节使当前位置满足一定的对齐方式。 声明一个符号可以被其他文件引用,相当于声明了一个全局变量。
2022/3/22
4
符号定义伪操作
伪操作
语法格式
作用
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
给一个全局或局部算术变量赋值。
伪操作
语法格式
.macro、.exitm 及.endm
.macro acroname {parameter{, parameter}…}

.endm
. ifdef,.else 及.endif
.ifdef condition … .else … .endif
2022/3/22
作用
.macro伪操作标识宏定义的开 始,.endm标识宏定义的结束。 用.macro及.endm定义一段代码,称 为宏定义体。.exitm伪操作用于提前 退出宏。
.bss
.bss {subsection} 将变量存放到.bss段或.bss段的子段。
.code 16/.thumb
.code 16 .thumb
表明当前汇编指令的指令集选择Thumb指令集。
.code 32/.arm
.code 32 .arm
表明当前汇编指令的指令集选择ARM指令集。
.end
.end
2022/3/22
11
常量编译控制伪操作
伪操作
语法格式
作用
.byte .hword/.short .ascii .asciz /.string .float/.single .double
.byte expr {,expr} … .hword expr {,expr} … .ascii expr {,expr} … .asciz expr {,expr} … .float expr {,expr} … .double expr {,expr} …
.req
.req name,expr
.err
.err
.print .print string
.fail
.fail expr
作用
在汇编符号列表文件中插入一分页符。 产生汇编列表(从 .list 到 .nolist)。 表示汇编列表结束处。 使用“heading ”作为标题。 使用“heading”作为子标题。 在当前段的当前地址(字对齐)产生一个文字池。 为一个特定的寄存器定义名称。 使编译时产生错误报告。 打印信息到标准输出。 编译汇编文件时产生警告。
其 他
告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在 本源文件中可能引用该符号。
告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在 本源文件中可能引用该符号。
将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。
将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。 告诉编译器将局部符号包含在目标文件的符号表中。 禁止源程序中包含浮点运算指令。 指定段之间的相互依赖关系。 为一个特定的寄存器定义名称。 定义局部变量的有效范围。
相关文档
最新文档