CONTENTS
备注:
1 本部分文档摘录自ARM网站【 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/index.html 】,版权归属于ARM。
2 作者只摘录了部分内容,全面详细的内容清参考ARM网址。
3.5. 符号
3.5.1. 符号命名规则
下列一般性规则适用于符号名称:
符号名在其范围内必须是唯一的。
可以在符号名称中使用大写字母、小写字母、数字字符或下划线字符。 符号名是区分大小写的,并且符号名中的所有字符都是有效的。
除了在局部标签中外,不要使用数字字符作为符号名的第一个字符(请参阅局部标签)。
符号不得使用与内置变量名称或预定义符号名称相同的名称(请参阅预定义的寄存器和协处理器名称和内置变量和常数)。
如果使用了与一个指令助记码或指令相同的名称,应使用双竖杠来定界符号名。 例如:
||ASSERT||
竖杠不是符号的一部分。
不得使用符号 |$a|、|$t|、|$t.x| 或 |$d| 作为程序标签。 这些是用于标记对象文件中的 ARM、Thumb、ThumbEE 和数据的映射符号。
如果必须在符号中使用更宽的字符范围(例如在使用编译器时),应使用单竖杠来定界符号名。 例如:
|.text|
竖杠不是符号的一部分。 不能在竖杠内使用竖杠、分号或换行符。
3.5.4. 汇编时的变量替换
可以使用一个字符串变量表示整行汇编语言或一行中的任何部分。 在要用值替换变量的位置处使用带有 $ 前缀的变量。 $ 字符指示汇编器在检查该行的语法之前,将该字符串替入源代码行中。
也可以替换数字和逻辑变量。 在替换之前,变量的当前值被转换为十六进制字符串(或逻辑变量的 T 或 F 值)。
如果变量名后面的字符会造成符号名的混淆,可以使用点号来标记变量名的结束(请参阅符号命名规则)。 在使用变量之前,必须设置其内容。
如果需要使用不被替换的 $ 字符,则使用 $$。 它将被转换为单个 $。
可以在字符串中包含带有 $ 前缀的变量。 替换方式与其他位置处的相同。
在竖杠内一般不进行替换,除非双引号内的竖杠不影响替换。
示例
; straightforward substitution GBLS add4ff ; add4ff SETS "ADD r4,r4,#0xFF" ; set up add4ff $add4ff.00 ; invoke add4ff ; this produces ADD r4,r4,#0xFF00 ; elaborate substitution GBLS s1 GBLS s2 GBLS fixup GBLA count ; count SETA 14 s1 SETS "a$$b$count" ; s1 now has value a$b0000000E s2 SETS "abc" fixup SETS "|xy$s2.z|" ; fixup now has value |xyabcz| |C$$code| MOV r4,#16 ; but the label here is C$$code
发表评论