好记性不如铅笔头

ARM, 操作系统, 编程

《RealView编译工具汇编器指南》摘录:符号

备注:

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

 

Leave a Reply

10 + 11 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据