【vfp精品源码栏目提醒】:网学会员鉴于大家对vfp精品源码十分关注,论文会员在此为大家搜集整理了“【精品】嵌入式—伪操作 - 其它资料”一文,供大家参考学习
ADS编译环境下的伪操作和宏指令 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 LIST { list 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/ label DCD expr ,expr… 分配一段字内存单元。
DCDUDCDO { label } DCDO expr { , 分配一段字对齐的字内存单元。
expr}…DCFD/ label DCFD {U}fpliteral 为双精度的浮点数分配字对齐的内存单元。
DCFDU {,fpliteral}…DCFS/ label DCFS {U} fpliteral 为单精度的浮点数分配字对齐的内存单元。
DCFSU {,fpliteral}…DCI label DCI expr { , 在ARM代码中分配一段字对齐的内存单元 在Thumb代码 expr}… 中,分配一段半字对齐的半字内存单元。
DCQ/ label DCQ { U } { - } 分配一段以双字(8个字节)为单位的内存DCQU literal{,{-}literal}…DCW/ label DCW{U}expr{, DCW用于分配一段半字对齐的半字内存单元。
DCWU expr}… 汇编控制伪操作 伪操作 语法格式 作用IF , ELSE IF logical expression 能够根据条件把一段源代码包及ENDIF … 括在汇编语言程序内或者将其 ELSE 排除在程序之外。
… ENDIFWHILE 及 WHILE logical expression 能够根据条件重复汇编相同的WEND … 一段
源代码。
WENDMACRO MACRO MACRO标识宏定义的开始,MEND、 MEND label macroname {parameter 标识宏定义的结束。
MERIT用于从及MEXIT {,parameter}…} 宏中跳转出去。
用MACRO和MEND …;宏代码 定义的一段代码,称为宏定义体。
通 MEND 过宏名称来调用宏。
信息报告伪操作伪操作 语法格式 作用ASSE ASSERT logical 对汇编程序的第二遍扫描中,如果其中ASSERT expression 中条件不成立,ASSERT伪操作将
报告该错误信RT 息。
INFO INFO numeric- 在汇编处理过程的第一遍扫描或者第二遍扫描时 expression , string- INFO伪操作报告诊断信息。
expressionOPT 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/ EXPORT symbol {〔WEAK〕} 声明一个符号可以被其他文件引用.GLOBALIMPORT IMPORT symbol {WEAK} 告诉编译器当前的符号不是在本源文件中定义的,而是在其他 源文件中定义的,在本源文件中可能引用该符号。
EXTERN EXTERN symbol {〔WEAK〕} 告诉编译器当前的符号不是在本源文件中定义的,而是在其他 源文件中定义的,在本源文件中可能引用该符号。
GET/ GET filename 将一个源文件包含到当前源文件中,并将被包含的文件在其当INCLUDE 前位置进行汇编处理。
INCBIN INCBIN filename 将一个文件包含到当前源文件中,被包含的文件不进行汇编处 理。
KEEP KEEP{symbol} 告诉编译器将局部符号包含在目标文件的符号表中。
NOFP NOFP 禁止源程序中包含浮点运算指令。
REQUIRE REQUIRE lable 指定段之间的相互依赖关系。
RN name RN expr 为一个特定的寄存器定义名称。
GNU编译环境下的伪操作和宏指令 GNU编译环境下的伪操作可分为以下几 类: 常量编译控制伪操作 汇编
程序代码控制伪操作 宏及条件编译控制伪操作 其他伪操作常量编译控制伪操作 : 伪操作 语法格式 作用.byte .byte expr ,expr … 分配一段字节内存单元,并用expr初始化。
.hword/.sh .hword expr ,expr … 分配一段半字内存单元,并用expr初始化。
ort.ascii .ascii expr ,expr … 定义字符串expr(非零结束符)。
.asciz .asciz expr ,expr … 定义字符串expr(以/0为结束符)。
/.string.float/.single .float expr ,expr … 定义一个32bit IEEE 浮点数expr。
.double .double expr ,expr … 定义64bit IEEE浮点数expr。
word/.long .word expr ,expr … 分配一段字内存单元,并用expr初始化。
/.int .fill repeat ,size, 分 配 一 段 字 节 内 存 单 元 , 用 size 长 度value填充repeat.fill value 次。
.zero .zero size 分配一段字节内存单元,并用0填充内存。
.space/.sk .space size value 分 配 一 段 内 存 单 元 , 用 value 将 内 存 单 元 初 始ip 化。
汇编程序代码控制伪操作 伪操作 语法格式 作用 .section expr 定义域中包含的段。
.section .text subsection 将操作符开始的代码编译到代码段或代码段子段。
.text .data subsection 将操作符开始的数据编译到数据段或数据段子段。
.data .bss subsection 将变量存放到.bss段或.bss段的子段。
.bss.code .code 16 表明当前汇编指令的指令集选择Thumb指令集。
16/.thumb .thumb.code .code 32 表明当前汇编指令的指令集选择ARM指令集。
32/.arm .arm.end .end 标记汇编文件的结束行,即标号后的代码不作处理。
.include “filename” 将一个源文件包含到当前源文件中。
.include.align/.balign .align alignment , 通过添加填充字节使当前位置满足一定的对齐方式。
fill ,max 宏及条件编译控制伪操作 伪操作 语法格式 作用.macro、. .macro acroname .macro 伪 操 作 标 识 宏 定 义 的 开 {parameter{, 始,.endm标识宏定义的结束。
用.macroexitm parameter}…} 及 .endm 定 义 一 段 代 码 , 称 为 宏 定 义及.endm … 体。
.exitm伪操作用于提前退出宏。
.endm. .ifdef condition 当满足某条件时对一组语句进行编 … 译,而当条件不满足时则编译另一组语ifdef,.el .else 句。
其中else可以缺省。
se …及.endif .endif 其他伪操作伪操作 语法格式 作用.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 编译汇编文件时产生警告。
ARM汇编语言的伪指令伪指令 语法格式 作用ADR ADR{cond} 将基于PC或基于寄存器的地址值读取到 register , expr 寄存器中。
小范围的地址读取。
ADRL ADRL { cond } 将基于PC或基于寄存器的地址值读取到 register,expr 寄存器中。
中等范围的地址读取。
LDR LDR { cond } 将一个32位的立即数或者一个地址值读 register , 〔 expr 取到寄存器中。
大范围的地址读取。
label-expr〕NOP NOP 在汇编时将被替换成ARM中的空操作。
转移条件B 转移BAL 解释 无条件的 总是 设置条件码 一般应用 总是执行转移 总是执行转移BEQ 相等 比较的结果为相等或零BNE 不等ARM的任何数据处理指令都能通过增加 比较的结果为不等或非零BPL “S”操作码来设置条件码(N,Z,C和V)。
正 结果为正数或零BMI 负 结果为负数BCC 无进位 算术操作未得到进位BLO 低于条件执行 无符号数比较,结果为低于BCSBHS ARM指令集不同寻常的特征是每条指令(除了 有进位 高于或相等 算术操作得到了进位 无符号数比较,结果为高于或相等BVC 某些v5T指令)都可以是条件执行的。
无溢出 有符号整数操作,未出现溢出BVS 有溢出 有符号整数操作,出现溢出BGT 条件转移 大于 有符号整数比较,结果为大于BGE 在程序中可以通过条件码的使用让微处理器决 大于或相等 有符号整数比较,结果为大于或相等BLT 定是否进行转移,还可用来控制循环的退出。
小于 有符号整数比较,结果为小于BLE 小于或相等 有符号整数比较,结果为小于或相等BHI 高于 无符号数比较,结果为高于BLS 低于或相等 无符号数比较,结果为低于或相等 子程序返回的方法 对于最简单的子程序,一条MOV指令就可以完成 子程序的返回 ,如下所示:SUB2 … MOV pc,r14 ;把r14拷贝到r15来返回 对于在子程序中出现嵌套调用时,链接寄存器LR 中的返回地址可能会在第二次调用时被覆盖,所 以需要将返回地址压入堆栈来进行保存SUB1 STMFD r13,r0 – r2, r14 ;保存工作寄存器和链接 BL SUB2 … LDMFD r13,r0 – r2,PC ;恢复
工作寄存器并返回 BL JUMPTAB …JUMPTAB ADR r1,SUBTAB ;r1:SUBTAB CMP r0,SUBMAX ;检查超限 LDRLS PC, r1, r0, LSL ;如果OK,跳转到表 2 中 B ERROR ;否则,发出错误信息SUBTAB DCD SUB0 ;子程序表入口 DCD SUB1 DCD SUB2ADS下的伪操作符 GNU下的伪操作符 ADS下的汇编代码与GNU下有较多不同点,主要是符号及伪操作INCLUDE .includeTCLK2 EQU PB25 的不同。
TCLK2 ,PB25 .equEXPORT .globalIMPORT .externDCD .longIF:DEF : .ifdefELSE .elseENDIF .endif:OR : :SHL