第一讲_伪操作、宏指令与伪指令

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

伪操作
语法格式
作用
ASSERT ASSERT logical expression
对汇编程序的第二遍扫描中,如果其中ASSERT中条件 不成立,ASSERT伪操作将报告该错误信息。
INFO OPT
INFO numeric-expression, 在汇编处理过程的第一遍扫描或者第二遍扫描时INFO伪
string-expression
声明一个全局的算术变量,并将其初始化成0。
GBLL
GBLL Variable
声明一个全局的逻辑变量,并将其初始化成{FALSE}。
GBLS
GBLS Variable
声明一个全局的字符串变量,并将其初始化成空串“”。
LCLA
LCLA Variable
声明一个局部的算术变量,并将其初始化成0。
LCLL
LCLL Variable
IF logical expression … {ELSE …} ENDIF
WHILE 及 WEND
WHILE logical expression … WEND
能够根据条件把一段源代码包括在汇编 语言程序内或者将其排除在程序之外。
能够根据条件重复汇编相同的一段源代 码。
MACRO 、 MEND 及
宏指令是一段独立的程序代码,它通过伪操作 来定义。通过宏名来调用宏,并可以设置相应 的参数。宏定义本身不会产生代码,只是在调 用它时把宏体插入到源程序中。
伪指令也是ARM汇编语言程序里的特殊指令 助记符,也不在处理器运行期间由机器执行, 它们在汇编时将被合适的机器指令代替成 ARM或Thumb指令从而实现真正指令操作。
定义一个结构化内存表中的数据域。
SPACE
{label} SPACE expr
分配一块连续内存单元,并用0初始化。
DCB
{label} DCB expr{,expr}
分配一段字节内存单元,并用expr初始化。
DCD/ DCDU DCDO
DCFD/ DCFDU DCFS/ DCFSU DCI
DCQ/ DCQU
二、两种常见的ARM编译开发环境
ADS/SDT IDE开发环境:它由ARM公司开发, 使用了CodeWarrior公司的编译器; 集成了GNU开发工具的IDE开发环境::它 由GNU的汇编器as、交叉编译器gcc、和链 接器ld等组成。
三、ADS环境下的伪操作和宏指令
➢ADS编译环境下的伪操作可分为以下几类:
• .float 和.single • .float expr {,expr}….. • .single expr {,expr}….. • 定义一个32位的IEEE浮点数expr • .float expr • .single expr • .float 0F3.14,0F359.3E11 • .single 0F12341234.14E2
常量编译控制伪操作
• .byte • .byte expr {,expr}….. • 分配一段字节内存单元(字节对齐),
并用expr初始化 • .byte 21,48,89,0x13,0xff
常量编译控制伪操作 • .hword和.short • .hword expr {,expr}….. • .short expr {,expr}….. • 分配一段半字的单元,并用expr 初始
四、 GNU环境下的伪操作和宏指令
• GNU编译环境下的伪操作可分为以下几类:
常量编译控制伪操作 字符编译控制伪操作 汇编程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作
常量编译控制伪操作
伪操作 .byte
语法格式 .byte expr {,expr} …
作用 分配一段字节内存单元,并用expr初始化。
DCW/ DCWU
{label} DCD expr {,expr}…
分配一段字内存单元。
{ label } DCDO expr { , 分配一段字对齐的字内存单元。 expr}… {label} DCFD {U}fpliteral{, 为双精度的浮点数分配字对齐的内存单元。 fpliteral}… {label} DCFS {U} fpliteral 为单精度的浮点数分配字对齐的内存单元。 {,fpliteral}… {label} DCI expr{,expr}… 在ARM代码中分配一段字对齐的内存单元; 在Thumb代码中,
操作报告诊断信息。
OPT n
通过OPT伪操作可以在源程序中设置列表选项。
TTL
TTL title
在列表文件的每一页的开头插入一个标题。
SUBT
SUBT subtitle
在列表文件的每一页的开头插入一个子标题。
其他伪操作
伪操作 CODE16 CODE32 EQU AREA ENTRY END ALIGN EXPORT/ GLOBAL IMPORT
GET filename
INCBIN filename KEEP{symbol} NOFP REQUIRE lable name RN expr {name} ROUT
作用 告诉汇编编译器后面的指令序列为16位的Thumb指令 告诉汇编编译器后面的指令序列为32位的ARM指令。 为数字常量、基于寄存器的值和程序中的标号(基于PC的值)定义一个字符名称。 定义一个代码段或者数据段。 指定程序的入口点。 告诉编译器已经到了源程序结尾。 通过添加补丁字节使当前位置满足一定的对齐方式。 声明一个符号可以被其他文件引用,相当于声明了一个全局变量。
分配一段半字对齐的半字内存单元。
{label} DCQ { U } { ﹣ } 分配一段以双字(8个字节)为单位的内存 literal{,{﹣}literal}…
{label} DCW{U}expr{, DCW用于分配一段半字对齐的半字内存单元。 expr}…
汇编控制伪操作
伪操作
语法格式
作用
IF , ELSE 及 ENDIF
声明一个局部的逻辑变量,并将其初始化成{FALSE}。
LCLS
LCLS Variable
声明一个局部的串变量,并将其初始化成空串“”。
SETA
SETA Variable expr
给一个全局或局部算术变量赋值。
SETL
SETL Variable expr
给一个全局或局部逻辑变量赋值。
SETS
SETS Variable expr
给一个全局或局部字符串变量赋值。
RLIST
name LIST{list of registers} 为一个通用寄存器列表定义名称。
CN
name CN expr
为一个协处理器的寄存器定义名称。
CP
name CP expr
为一个协处理器定义名称。
DN/SN
name DN/SN expr
DN/SN为一个双精度/单精度的VFP寄存器定义名称。
符号定义(Symbol Definition)伪操作 数据定义(Data Definition)伪操作 汇编控制(Assembly Control)伪操作 信息报告(Reporting)伪操作 其他(Miscellaneous)伪操作
符号定义伪操作
伪操作
语法格式
作用
GBLA
GBLA Variable
FN
name FN expr
为一个FPA浮点寄存器定义名称。
数据定义伪操作
伪操作 LTORG
语法格式 LTORG
作用 声明一个数据缓冲池(也称为文字池)的开始。
MAP
MAP expr{,base-register}
定义一个结构化的内存表(Storage Map)的首地址。
FIELD
{label} FIELD expr
.float/.single
.float expr {,expr} …
定义一个32bit IEEE 浮点数expr。
.double
.double expr {,expr} …
定义64bit IEEE浮点数expr。
word/.long /.int .word expr {,expr} …
分配一段字内存单元,并用expr初始化。
EXTERN
GET/ INCLUDE INCBIN KEEP NOFP REQUIRE RN ROUT
语法格式 CODE16 CODE32 name EQU expr{,type} AREA sectionname{,attr}{,attr}… ENTRY END ALIGN {expr{,offset}} EXPORT symbol {[WEAK]} IMPORT symbol {[WEAK]} EXTERN symbol {〔WEAK〕}
告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源 文件中可能引用该符号。 告诉编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源 文件中可能引用该符号。 将一个源文件包含到当前源文件中,并将被包含的文件在其当前位置进行汇编处理。
将一个文件包含到当前源文件中,被包含的文件不进行汇编处理。 告诉编译器将局部符号包含在目标文件的符号表中。 禁止源程序中包含浮点运算指令。 指定段之间的相互依赖关系。 为一个特定的寄存器定义名称。 定义局部变量的有效范围。
ARM汇编语言的伪操作宏指令与伪指令
伪操作、宏指令及伪指令概念 两种常见的ARM编译环境 ADS编译环境下的伪操作 GNU编译环境下的伪操作 ARM汇编语言的伪指令
一、伪操作、宏指令及伪指令概念
伪操作是ARM汇编语言程序里的一些特殊指 令助记符,主要是为完成汇编程序做各种准备 工作,在源程序进行汇编时由汇编程序处理, 而不是在处理器运行期间由机器执行。
MEXIT
Baidu Nhomakorabea
MACRO
{$label} macroname {$parameter{,
$parameter}…}

;宏代码
MEND
MACRO标识宏定义的开始,MEND标 识宏定义的结束。MERIT用于从宏中跳 转出去。用MACRO和MEND定义的一 段代码,称为宏定义体。通过宏名称来 调用宏。
信息报告伪操作

• .hword 21,25,89,0x1133,0x77FF • .short 236,0xF4F
常量编译控制伪操作
• .ascii • .ascii expr {,expr}….. • 定义字符串expr(非零结束符) • .ascii “How are you” • /*不是以“/0”结束*/
常量编译控制伪操作
• .ascii和.string • .ascii expr {,expr}….. • .string expr {,expr}….. • 定义字符串expr,以“/0”结束 • .ascii “how are you” • .string “how are you”
常量编译控制伪操作
常量编译控制伪操作
• .double • .double expr {,expr}….. • 定义64位浮点数 • .double 0F2E1
常量编译控制伪操作
• .word和.long 和.int • .word expr {,expr}….. • .long expr {,expr}….. • .int expr {,expr}….. • 分配一段字内存单元,并用expr初始化 • .word 21,0x110033,0x77ff2255 • Src: • .long 1,2,3,4,5,6,7,8 • /*定义一个数据区,以Src为起始地址*/
.hword/.short
.hword expr {,expr} …
分配一段半字内存单元,并用expr初始化。
.ascii
.ascii expr {,expr} …
定义字符串expr(非零结束符)。
.asciz /.string
.asciz expr {,expr} …
定义字符串expr(以/0为结束符)。
.fill
.fill repeat {,size}{,value} 分配一段字节内存单元,用size长度value填充repeat次。
.zero
.zero size
分配一段字节内存单元,并用0填充内存。
.space/.skip
.space size {, value}
分配一段内存单元,用value将内存单元初始化。
嵌入式系统开发与应用
第三部分 基于ARM的嵌入式软件开发基础
基于ARM的嵌入式软件开发基础
1. ARM汇编语言的伪操作、宏指令与伪指令 2. ARM汇编语言程序设计 3. 嵌入式C语言程序设计基础 4. 嵌入式C语言程序设计实例 5. 嵌入式C语言程序设计技巧 6. C与汇编语言混合编程
第一讲
ARM汇编语言的伪操作、宏指令 与伪指令
相关文档
最新文档