ARM汇编特殊符号 汇编符号引用

特殊符号 ---- 对应指令 ---- 含义 ---- 示例
^ ---- MAP ---- 定义结构化内存表 ---- MAP 4096;内存表首地址为4096
# ---- FIELD ---- 定义内存表中的数据,结合MAP指令使用 ---- 
MAP 4096
STACKSVC FIELD     256;定义从4096开始的256字节为SVC的堆栈空间。
% ---- SPACE ---- 分配一块内存,并用“0”初始化 ---- DataStruc SPACE 280;分配280字节内存并初始化
[|]  ---- IF ELSE ENDIF ---- 条件编译,有选择的确定需要编译的代码IF,ELSE,ENDIF,可以嵌套使用 ---- 
IF 逻辑表达式
指令或伪指令
ELSE
指令或伪指令
ENDIF
另外还有符号: $
如果在串变量前有一个$,则在 汇编时编译器将用该串变量的数值取代该串变量,如:
GBLS    STR1
GBLS    STR2
STR1    SETS      “pen.”
STR2    SETS      “This is a $STR1"
编译后的结果是STR2的值为This is a pen.
如果$后是数字变量(与串变量区分),在汇编时编译器将该数字变量的数值转换成十六进制的串,然后用该十六进制的串取代$后的数字变量
如果$后是逻辑变量,在汇编时编译器将该逻辑变量替换成它的取值(T或者F)
如果程序中需要$,则用$$来表示,编译器将不进行变量替换
                     GBLS   STR1
                     GBLS   B
                     GBLA   NUM1
NUM1            SETA   14
B                   SETS   “CHANGED”
STR1             SETS    “abc $$B$NUM1”
编译结果STR1的值为:abc B0000000E。
注意: 在两个竖线“|”之间的$并不表示进行变量替换,但如果“|”是在双引号内,则将进行变量替换。
使用点"."来表示变量名的结束
            GBLS    STR1
            GBLS    STR2
STR1    SETS      “AAA”
STR2    SETS      “bbb$STR1.CCC"
编译结果STR2值为bbbAAACCC
还有一个例外:“%”
“%”除了表示SPACE外,还可以在局部标号中使用,具体意思见伪指令ROUT的使用示例:
◆ROUT
ROUT伪指令 定义局部标号的有效范围,伪指令格式如下:{name} ROUT。其中 name 所定义的作用范围的名称。
当没有使用ROUT伪指令时,局部标号的作用范围为所在段; ROUT伪令的作用范围在本ROUT伪指令和下一个ROUT伪指令之间(指同一段中的ROUT伪指令)
伪指令应用举例如下:
    routineA ROUT                         ;定义局部标号的有效范围,名称为routineA
                  ......
    3routineA                                ;routineA范围内的局部标号3
                ......
                 BEQ   %4routineA       ;若条件成立,跳转到routineA范围内的局部标号 4
                 ......
                 BEQ   %3routineA       ;若条件成立,跳转到routineA范Iq内的局部标号 3
                 ......
    4routineA                                ;routineA范围内的局部标号4
                  ......
    otherstuff ROUT                      ;定义新的局部标号的有效范围

 

 

----------------------------------------------------------------------

 

ADS中ARM汇编语言程序设计的符号引用规范

 

Error:Undefined symbols ....
    找到引用符号的汇编源文件和定义符号的汇编源文件仔细检查和对比,符号没有写错,而且在引用符号之前确实把符号使用IMPORT引入了进来。百思不得其解时,突然想到在定义符号的文件中没有对符号EXPORT。非常低级的错误。
    在汇编语言程序设计中,养成良好的编程习惯,形成良好的编码风格是非常重要的。 这里仅根据个人习惯和体会略谈一下使用ADS进行ARM汇编语言程序设计时的符号引用规则,主要是对不同性质的符号使用不同的引用办法:
    (1) 对于寄存器地址定义以及通用的常量或符号定义(使用EQU定义),可以按类定义在一个.s汇编文件中,在要使用这些定义的源文件中可使用INCLUDE将该.s汇编文件包含进来
    这样做的好处是:避免大量的IMPORT和EXPORT伪语句,增强代码的可读性,另外,对于多个源文件要使用许多相同寄存器地址定义或常量定义的场合,这样做可以大大压缩代码尺寸(经笔者实践证实)。
    (2) 对于代码段的地址标号或函数入口地址标号(函数名),在代码段或函数的定义处使用EXPORT输出;在要调用该代码段或函数的源文件中使用IMPORT将符号引入。
    一定要保证IMPORT和EXPORT是成对使用的,若不EXPORT则IMPORT无效,若只EXPORT而不IMPORT也无法引用符号。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值