ZHCU947E June   2015  – January 2023

 

  1.   请先阅读
    1.     关于本手册
    2.     如何使用本手册
    3.     命名规则
    4.     德州仪器 (TI) 提供的相关文档
    5.     商标
  2. 软件开发工具简介
    1. 1.1 软件开发工具概述
    2. 1.2 工具说明
  3. 目标模块简介
    1. 2.1 目标文件格式规范
    2. 2.2 可执行目标文件
    3. 2.3 段简介
      1. 2.3.1 特殊段名
    4. 2.4 汇编器如何处理段
      1. 2.4.1 未初始化的段
      2. 2.4.2 已初始化段
      3. 2.4.3 用户命名的段
      4. 2.4.4 当前段
      5. 2.4.5 段程序计数器
      6. 2.4.6 子段
      7. 2.4.7 使用 Sections 指令
    5. 2.5 链接器如何处理段
      1. 2.5.1 合并输入段
      2. 2.5.2 放置段
    6. 2.6 符号
      1. 2.6.1 全局(外部)符号
      2. 2.6.2 局部符号
      3. 2.6.3 弱符号
      4. 2.6.4 符号表
    7. 2.7 符号重定位
    8. 2.8 加载程序
  4. 程序加载和运行
    1. 3.1 负载
      1. 3.1.1 加载和运行地址
      2. 3.1.2 引导加载
        1. 3.1.2.1 引导、加载和运行地址
        2. 3.1.2.2 主引导加载程序
    2. 3.2 入口点
    3. 3.3 运行时初始化
      1. 3.3.1 _c_int00 函数
      2. 3.3.2 RAM 模型与 ROM 模型
        1. 3.3.2.1 在运行时自动初始化变量 (--rom_model)
        2. 3.3.2.2 在加载时初始化变量 (--ram_model)
        3. 3.3.2.3 --rom_model 和 --ram_model 链接器选项
      3. 3.3.3 关于链接器生成的复制表
        1. 3.3.3.1 BINIT
        2. 3.3.3.2 CINIT
    4. 3.4 main 的参数
    5. 3.5 运行时重定位
    6. 3.6 其他信息
  5. 汇编器说明
    1. 4.1  汇编器概述
    2. 4.2  汇编器在软件开发流程中的作用
    3. 4.3  调用汇编器
    4. 4.4  应用二进制接口
    5. 4.5  指定用于汇编器输入的备用目录
      1. 4.5.1 使用 --include_path 汇编器选项
      2. 4.5.2 使用 C6X_A_DIR 环境变量
    6. 4.6  源语句格式
      1. 4.6.1 标签字段
      2. 4.6.2 助记符字段
      3. 4.6.3 单元说明符字段
      4. 4.6.4 操作数字段
      5. 4.6.5 注释字段
    7. 4.7  字面常量
      1. 4.7.1 整数字面量
        1. 4.7.1.1 二进制整数字面量
        2. 4.7.1.2 八进制整数字面量
        3. 4.7.1.3 十进制整数字面量
        4. 4.7.1.4 十六进制整数字面量
        5. 4.7.1.5 字符字面量
      2. 4.7.2 字符串字面量
      3. 4.7.3 浮点字面量
    8. 4.8  汇编器符号
      1. 4.8.1  标识符
      2. 4.8.2  标签
      3. 4.8.3  局部标签
        1. 4.8.3.1 $n 格式的局部标签
        2.       80
        3. 4.8.3.2 name? 格式的局部标签
        4.       82
      4. 4.8.4  符号常数
      5. 4.8.5  定义符号常量(--asm_define 选项)
      6. 4.8.6  预定义符号常量
      7. 4.8.7  寄存器
      8. 4.8.8  寄存器对
      9. 4.8.9  四倍字寄存器(仅限 C6600)
      10. 4.8.10 替代符号
    9. 4.9  表达式
      1. 4.9.1 数学和逻辑运算符
      2. 4.9.2 关系运算符和条件表达式
      3. 4.9.3 明确定义的表达式
      4. 4.9.4 合法表达式
      5. 4.9.5 表达式示例
    10. 4.10 内置函数和运算符
      1. 4.10.1 内置数学和三角函数
      2. 4.10.2 C6x 内置 ELF 重定位生成运算符
        1. 4.10.2.1 $DPR_BYTE(sym) / $DPR_HWORD(sym) / $DPR_WORD(sym)
        2. 4.10.2.2 $LABEL_DIFF(x,y) 运算符
    11. 4.11 源程序列表
    12. 4.12 调试汇编源文件
    13. 4.13 交叉引用列表
  6. 汇编器指令
    1. 5.1  指令摘要
    2. 5.2  用于定义段的指令
    3. 5.3  用于初始化值的指令
    4. 5.4  执行对齐和保留空间的指令
    5. 5.5  用于设置输出列表格式的指令
    6. 5.6  用于引用其他文件的指令
    7. 5.7  用于启用条件汇编的指令
    8. 5.8  用于定义联合体或结构体类型的指令
    9. 5.9  用于定义枚举类型的指令
    10. 5.10 在汇编时用于定义符号的指令
    11. 5.11 其他命令
    12. 5.12 指令参考
      1.      .align
      2.      .asg/.define/.eval
      3.      .asmfunc/.endasmfunc
      4.      .bits
      5.      .bss
      6.      .byte/.ubyte/.char/.uchar
      7.      .cdecls
      8.      .common
      9.      .copy/.include
      10.      .cstruct/.cunion/.endstruct/.endunion/.tag
      11.      .data
      12.      .double
      13.      .drlist/.drnolist
      14.      .elfsym
      15.      .emsg/.mmsg/.wmsg
      16.      .end
      17.      .farcommon/.nearcommon
      18.      .fclist/.fcnolist
      19.      .field
      20.      .float
      21.      .global/.def/.ref
      22.      .group/.gmember/.endgroup
      23.      .half/.short/.uhalf/.ushort
      24.      .if/.elseif/.else/.endif
      25.      .int/.unint/.long/.ulong/.word/.uword
      26.      .label
      27.      .length/.width
      28.      .list/.nolist
      29.      .loop/.endloop/.break
      30.      .macro/.endm
      31.      .map/.clearmap
      32.      .mlib
      33.      .mlist/.mnolist
      34.      .newblock
      35.      .nocmp
      36.      .noremark/.remark
      37.      .option
      38.      .page
      39.      .retain/.retainrefs
      40.      .sect
      41.      .set/.equ
      42.      .space/.bes
      43.      .sslist/.ssnolist
      44.      .string/.cstring
      45.      .struct/.endstruct/.tag
      46.      .symdepend
      47.      .tab
      48.      .text
      49.      .title
      50.      .unasg/.undefine
      51.      .union/.endunion/.tag
      52.      .usect
      53.      .var
      54.      .weak
  7. 宏语言说明
    1. 6.1  使用宏
    2. 6.2  定义宏
    3. 6.3  宏参数/替代符号
      1. 6.3.1 用于定义替代符号的指令
      2. 6.3.2 内置替代符号函数
      3. 6.3.3 递归替代符号
      4. 6.3.4 强制替代
      5. 6.3.5 访问带下标的替代符号的各个字符
      6. 6.3.6 替代符号作为宏中的局部变量
    4. 6.4  宏库
    5. 6.5  在宏中使用条件汇编
    6. 6.6  在宏中使用标签
    7. 6.7  在宏中生成消息
    8. 6.8  使用指令设置输出列表的格式
    9. 6.9  使用递归和嵌套宏
    10. 6.10 宏指令摘要
  8. 归档器说明
    1. 7.1 归档器概述
    2. 7.2 归档器在软件开发流程中的作用
    3. 7.3 调用归档器
    4. 7.4 归档器示例
    5. 7.5 库信息归档器说明
      1. 7.5.1 调用库信息归档器
      2. 7.5.2 库信息归档器示例
      3. 7.5.3 列出索引库的内容
      4. 7.5.4 要求
  9. 链接器说明
    1. 8.1  链接器概述
    2. 8.2  链接器在软件开发流程中的作用
    3. 8.3  调用链接器
    4. 8.4  链接器选项
      1. 8.4.1  文件、段和符号模式中的通配符
      2. 8.4.2  通过链接器选项指定 C/C++ 符号
      3. 8.4.3  重定位功能(--absolute_exe 和 --relocatable 选项)
        1. 8.4.3.1 生成绝对输出模块(--absolute_exe 选项)
        2. 8.4.3.2 生成可重定位输出模块(--relocatable 选项)
      4. 8.4.4  分配存储器供加载器使用以传递参数(--arg_size 选项)
      5. 8.4.5  压缩(--cinit_compression 和 --copy_compression 选项)
      6. 8.4.6  压缩 DWARF 信息(--compress_dwarf 选项)
      7. 8.4.7  控制链接器诊断
      8. 8.4.8  自动选择库(--disable_auto_rts 和 --multithread 选项)
      9. 8.4.9  不要删除未使用的段(--unused_section_elimination 选项)
      10. 8.4.10 链接器命令文件预处理(--disable_pp、--define 和 --undefine 选项)
      11. 8.4.11 纠错码测试(--ecc 选项)
      12. 8.4.12 定义入口点(--entry_point 选项)
      13. 8.4.13 设置默认填充值(--fill_value 选项)
      14. 8.4.14 定义堆大小(--heap_size 选项)
      15. 8.4.15 隐藏符号
      16. 8.4.16 改变库搜索算法(--library、--search_path 和 C6X_C_DIR)
        1. 8.4.16.1 指定备用库目录(--search_path 选项)
        2. 8.4.16.2 指定备用库目录(C6X_C_DIR 环境变量)
        3. 8.4.16.3 详尽读取和搜索库(--reread_libs 和 --priority 选项)
      17. 8.4.17 更改符号局部化
        1. 8.4.17.1 将所有全局符号设为静态(--make_static 选项)
      18. 8.4.18 创建映射文件(--map_file 选项)
      19. 8.4.19 管理映射文件内容(--mapfile_contents 选项)
      20. 8.4.20 禁用名称还原 (--no_demangle)
      21. 8.4.21 合并符号调试信息
      22. 8.4.22 去除符号信息(--no_symtable 选项)
      23. 8.4.23 指定输出模块(--output_file 选项)
      24. 8.4.24 确定函数放置优先级(--preferred_order 选项)
      25. 8.4.25 C 语言选项(--ram_model 和 --rom_model 选项)
      26. 8.4.26 保留丢弃的段(--retain 选项)
      27. 8.4.27 扫描所有库中的重复符号定义(--scan_libraries)
      28. 8.4.28 定义栈大小(--stack_size 选项)
      29. 8.4.29 符号映射(--symbol_map 选项)
      30. 8.4.30 生成 Far 调用 Trampoline(--trampolines 选项)
        1. 8.4.30.1 使用 Trampoline 的优缺点
        2. 8.4.30.2 尽量减少所需的 Trampoline 数量(--minimize_trampolines 选项)
        3. 8.4.30.3 使 Trampoline 保留相邻(--trampoline_min_spacing 选项)
        4. 8.4.30.4 将 Trampoline 从加载空间传送到运行空间
      31. 8.4.31 引入未解析的符号(--undef_sym 选项)
      32. 8.4.32 创建未定义的输出段时显示一条消息 (--warn_sections)
      33. 8.4.33 生成 XML 链接信息文件(--xml_link_info 选项)
      34. 8.4.34 零初始化(--zero_init 选项)
    5. 8.5  链接器命令文件
      1. 8.5.1  链接器命令文件中的保留名称
      2. 8.5.2  链接器命令文件中的常量
      3. 8.5.3  从链接器命令文件访问文件和库
      4. 8.5.4  MEMORY 指令
        1. 8.5.4.1 默认存储器型号
        2. 8.5.4.2 MEMORY 指令语法
        3. 8.5.4.3 表达式和地址运算符
      5. 8.5.5  SECTIONS 指令
        1. 8.5.5.1 SECTIONS 指令语法
        2. 8.5.5.2 段分配和放置
          1. 8.5.5.2.1 绑定
          2. 8.5.5.2.2 指定的存储器
          3. 8.5.5.2.3 使用 HIGH 位置说明符来控制放置
            1. 8.5.5.2.3.1 使用 HIGH 说明符进行链接器放置
            2.         262
            3. 8.5.5.2.3.2 在没有 HIGH 说明符的情况下进行链接器放置
          4. 8.5.5.2.4 对齐和分块
          5. 8.5.5.2.5 对齐和填充
        3. 8.5.5.3 指定输入段
          1. 8.5.5.3.1 指定段内容的最常用方法
          2.        268
        4. 8.5.5.4 使用多级子段
        5. 8.5.5.5 指定库或存档成员作为输出段的输入
          1. 8.5.5.5.1 将成员存档至输出段
          2.        272
        6. 8.5.5.6 使用多个存储器范围进行分配
        7. 8.5.5.7 在非连续存储器范围之间自动拆分输出段
      6. 8.5.6  在不同的加载和运行地址放置段
        1. 8.5.6.1 指定加载和运行地址
        2.       277
        3. 8.5.6.2 使用 .label 指令引用加载地址
      7. 8.5.7  使用 GROUP 和 UNION 语句
        1. 8.5.7.1 将输出段一同进行分组
        2. 8.5.7.2 利用 UNION 语句叠加段
        3. 8.5.7.3 将存储器用于多种用途
        4. 8.5.7.4 嵌套 UNION 和 GROUP
        5. 8.5.7.5 检查分配器的一致性
        6. 8.5.7.6 为 UNION 和 GROUP 命名
      8. 8.5.8  特殊段类型(DSECT、COPY、NOLOAD 和 NOINIT)
      9. 8.5.9  使用链接器配置纠错码 (ECC)
        1. 8.5.9.1 在存储器映射中使用 ECC 说明符
        2. 8.5.9.2 使用 ECC 指令
        3. 8.5.9.3 在存储器映射中使用 VFILL 限定符
      10. 8.5.10 在链接时分配符号
        1. 8.5.10.1 赋值语句的语法
        2. 8.5.10.2 向符号分配 SPC
        3. 8.5.10.3 赋值表达式
        4. 8.5.10.4 由链接器自动定义的符号
        5. 8.5.10.5 向符号分配一个段的确切开始值、结束值和大小值
        6. 8.5.10.6 为什么点运算符有时不起作用
        7. 8.5.10.7 地址和维度运算符
          1. 8.5.10.7.1 输入项
          2. 8.5.10.7.2 输出段
          3. 8.5.10.7.3 GROUP
          4. 8.5.10.7.4 UNION
      11. 8.5.11 创建和填充孔洞
        1. 8.5.11.1 已初始化和未初始化的段
        2. 8.5.11.2 创建空洞
        3. 8.5.11.3 填充孔洞
        4. 8.5.11.4 对未初始化的段进行显式初始化
    6. 8.6  链接器符号
      1. 8.6.1 在 C/C++ 应用中使用链接器符号
      2. 8.6.2 声明弱符号
      3. 8.6.3 利用对象库解析符号
    7. 8.7  默认放置算法
      1. 8.7.1 分配算法如何创建输出段
      2. 8.7.2 减少存储器碎片
    8. 8.8  使用由链接器生成的复制表
      1. 8.8.1 使用复制表进行引导加载
      2. 8.8.2 在复制表中使用内置链接运算符
      3. 8.8.3 重叠管理示例
      4. 8.8.4 使用 table() 运算符生成复制表
        1. 8.8.4.1 table() 操作符
        2. 8.8.4.2 启动时复制表
        3. 8.8.4.3 使用 table() 操作符管理目标组件
        4. 8.8.4.4 由链接器生成的复制表段和符号
        5. 8.8.4.5 拆分对象组件和重叠管理
      5. 8.8.5 压缩
        1. 8.8.5.1 压缩的复制表格式
        2. 8.8.5.2 目标文件中的压缩段表示
        3. 8.8.5.3 压缩的数据布局
        4. 8.8.5.4 运行时解压缩
        5. 8.8.5.5 压缩算法
        6.       331
      6. 8.8.6 复制表内容
      7. 8.8.7 通用复制例程
    9. 8.9  部分(增量)链接
    10. 8.10 链接 C/C++ 代码
      1. 8.10.1 运行时初始化
      2. 8.10.2 对象库和运行时支持
      3. 8.10.3 设置堆栈段的大小
      4. 8.10.4 在运行时初始化和自动初始化变量
    11. 8.11 链接器示例
  10. 目标文件实用程序
    1. 9.1 调用目标文件显示实用程序
    2. 9.2 调用反汇编器
    3. 9.3 调用名称实用程序
    4. 9.4 调用符号去除实用程序
  11. 10十六进制转换实用程序说明
    1. 10.1  软件开发流程中十六进制转换实用程序的作用
    2. 10.2  调用十六进制转换实用程序
      1. 10.2.1 从命令行调用十六进制转换实用程序
      2. 10.2.2 使用命令文件调用十六进制转换实用程序
    3. 10.3  理解存储器宽度
      1. 10.3.1 目标宽度
      2. 10.3.2 指定存储器宽度
      3. 10.3.3 将数据分入输出文件
      4. 10.3.4 指定输出字的字序
    4. 10.4  ROMS 指令
      1. 10.4.1 何时使用 ROMS 指令
      2. 10.4.2 ROMS 指令的示例
    5. 10.5  SECTIONS 指令
    6. 10.6  加载映像格式(--load_image 选项)
      1. 10.6.1 加载映像段形成
      2. 10.6.2 加载映像特性
    7. 10.7  排除指定段
    8. 10.8  分配输出文件名
    9. 10.9  映像模式和 --fill 选项
      1. 10.9.1 生成存储器映像
      2. 10.9.2 指定填充值
      3. 10.9.3 使用映像模式的步骤
    10. 10.10 数组输出格式
    11. 10.11 控制 ROM 器件地址
    12. 10.12 控制十六进制转换实用程序诊断
    13. 10.13 目标格式说明
      1. 10.13.1 ASCII 十六进制对象格式(--ascii 选项)
      2. 10.13.2 Intel MCS-86 目标格式(--intel 选项)
      3. 10.13.3 Motorola Exorciser 对象格式(--motorola 选项)
      4. 10.13.4 扩展的 Tektronix 目标格式(--tektronix 选项)
      5. 10.13.5 德州仪器 (TI) SDSMAC (TI-Tagged) 目标格式(--ti_tagged 选项)
      6. 10.13.6 TI-TXT 十六进制格式(--ti_txt 选项)
        1. 10.13.6.1 TI-TXT 目标格式
  12. 11与汇编源代码共享 C/C++ 头文件
    1. 11.1 .cdecls 指令概述
    2. 11.2 C/C++ 转换注意事项
      1. 11.2.1  说明
      2. 11.2.2  条件编译(#if/#else/#ifdef/等)
      3. 11.2.3  Pragma
      4. 11.2.4  #error 和 #warning 指令
      5. 11.2.5  预定义符号 __ASM_HEADER__
      6. 11.2.6  在 C/C++ asm( ) 语句中的用法
      7. 11.2.7  #include 指令
      8. 11.2.8  转换 #define 宏
      9. 11.2.9  #undef 指令
      10. 11.2.10 枚举
      11. 11.2.11 C 字符串
      12. 11.2.12 C/C++ 内置函数
      13. 11.2.13 结构体和联合体
      14. 11.2.14 函数/变量原型
      15. 11.2.15 C 常量后缀
      16. 11.2.16 基本 C/C++ 类型
    3. 11.3 C++ 专有转换注意事项
      1. 11.3.1 名称改编
      2. 11.3.2 衍生类
      3. 11.3.3 模板
      4. 11.3.4 虚拟函数
    4. 11.4 汇编器特殊支持
      1. 11.4.1 枚举 (.enum/.emember/.endenum)
      2. 11.4.2 .define 指令
      3. 11.4.3 .undefine/.unasg 指令
      4. 11.4.4 $defined( ) 内置函数
      5. 11.4.5 $sizeof 内置函数
      6. 11.4.6 结构体/联合体对齐和 $alignof( )
      7. 11.4.7 .cstring 指令
  13.   A 符号调试指令
    1.     A.1 DWARF 调试格式
    2.     A.2 调试指令语法
  14.   B XML 链接信息文件说明
    1.     B.1 XML 信息文件元素类型
    2.     B.2 文档元素
      1.      B.2.1 标头元素
      2.      B.2.2 输入文件列表
      3.      B.2.3 对象组件列表
      4.      B.2.4 逻辑组列表
      5.      B.2.5 放置映射
      6.      B.2.6 Far Call Trampoline 列表
      7.      B.2.7 符号表
  15.   C 术语表
    1.     C.1 术语
  16.   D 修订历史记录
  17.   428
  18.   D 早期修订版本

指令摘要

#GUID-DC65B879-A6FB-4F71-9DF0-33133AB9BFC6/STDZ0727056#GUID-DC65B879-A6FB-4F71-9DF0-33133AB9BFC6/STDZ0720648 汇总了汇编器指令。除文中所述的汇编器指令之外,TMS320C6000 软件工具还支持以下指令:

注: 标签和注释未显示在语法中:大多数包含指令的源语句还可以包含标签和注释。标签从第一列开始(只有标签和注释可以出现在第一列中),注释前面必须有分号,如果注释是该行中的唯一元素,则必须在前面加上星号。为提高可读性,此处未将标签和注释显示为指令语法的一部分。请参阅每个指令的详细说明以在指令中使用标签。
表 5-1 供控制段使用的指令
助记符和语法 说明 请参阅
.bss symbol, size in bytes[, alignment
[, bank offset]]
在 .bss(未初始化数据)段中保留size字节 .bss 主题
.data 汇编到 .data(已初始化的数据)段 .data 主题
.sect "section name" 汇编到命名(已初始化)段 .sect 主题
.text 汇编到 .text(可执行代码)段 .text 主题
symbol .usect "section name", size in bytes
[, alignment[,bank offset]]
在命名(未初始化)段中保留 size字节 .usect 主题
表 5-2 用于将段收集到通用组中的指令
助记符和语法 说明 请参阅
.endgroup 结束组声明。 .endgroup 主题
.gmember section name 段名 指定为该组成员。 .gmember 主题
.group group section name group type : 开始组声明。 .group 主题
表 5-3 会影响未使用段消除的指令
助记符和语法 说明 请参阅
.retain "section name" 指示链接器在链接的输出文件中包含当前段或指定段,无论该段是否被引用 .retain 主题
.retainrefs "section name" 指示链接器包含引用当前段或指定段的任何数据对象。 .retain 主题
表 5-4 用于初始化值(数据和存储器)的指令
助记符和语法 说明 请参阅
.bits value1[, ..., valuen] 在当前段中初始化一个或多个连续位 .bits 主题
.byte value1[, ..., valuen] 在当前段中初始化一个或多个连续字节 .byte 主题
.char value1[, ..., valuen] 在当前段中初始化一个或多个连续字节 .char 主题
.cstring {expr1|"string1"}[,..., {exprn|"stringn"}] 初始化一个或多个文本字符串 .string 主题
.double value1[, ..., valuen] 初始化一个或多个 64 位、IEEE 双精度、浮点常量 .double 主题
.field value[, size] 使用 初始化 size 位 (1-32) 字段 .field 主题
.float value1[, ..., valuen] 初始化一个或多个 32 位、IEEE 单精度、浮点常量 .float 主题
.half value1[, ..., valuen] 初始化一个或多个 16 位整数(半字) .half 主题
.int value1[, ..., valuen] 初始化一个或多个 32 位整数 .int 主题
.long value1[, ..., valuen] 初始化一个或多个 32 位整数 .long 主题
.short value1[, ..., valuen] 初始化一个或多个 16 位整数(半字) .short 主题
.string {expr1|"string1"}[,..., {exprn|"stringn"}] 初始化一个或多个文本字符串 .string 主题
.ubyte value1[, ..., valuen] 在当前段中初始化一个或多个连续无符号字节 .ubyte 主题
.uchar value1[, ..., valuen] 在当前段中初始化一个或多个连续无符号字节 .uchar 主题
.uhalf value1[, ..., valuen] 初始化一个或多个无符号 16 位整数(半字) .uhalf 主题
.uint value1[, ..., valuen] 初始化一个或多个无符号 32 位整数 .uint 主题
.ulong value1[, ..., valuen] 初始化一个或多个无符号 32 位整数 .long 主题
.ushort value1[, ..., valuen] 初始化一个或多个无符号 16 位整数(半字) .short 主题
.uword value1[, ..., valuen] 初始化一个或多个无符号 32 位整数 .uword 主题
.word value1[, ..., valuen] 初始化一个或多个 32 位整数 .word 主题
表 5-5 用于执行对齐和保留空间的指令
助记符和语法 说明 请参阅
.align [size in bytes ] size in bytes(必须是 2 的幂)指定的边界上对齐 SPC;默认为字节边界 .align 主题
.bes size 在当前段中保留 size 个字节;一个标签指向保留空间的末尾 .bes 主题
.space size 在当前段中保留 size字节;一个标签指向保留空间的开头 .space 主题
表 5-6 用于设置输出列表格式的指令
助记符和语法 说明 请参阅
.drlist 允许列出所有指令行(默认) .drlist 主题
.drnolist 禁止列出特定指令行 .drnolist 主题
.fclist 允许列出错误条件代码块(默认) .fclist 主题
.fcnolist 禁止列出错误条件代码块 .fcnolist 主题
.length [page length] 设置源代码列表的页长度 .length 主题
.list 重新启动源代码列表 .list 主题
.mlist 允许列出宏和循环块(默认) .mlist 主题
.mnolist 禁止列出宏和循环块 .mnolist 主题
.nolist 停止源代码列表 .nolist 主题
.option option1[, option2 , ...] 选择输出列表选项;可用的选项有 A、B、D、H、L、M、N、O、R、T、W 和 X .option 主题
.page 在源列表中弹出一页 .page 主题
.sslist 允许列出展开的替代符号 .sslist 主题
.ssnolist 禁止列出展开的替代符号(默认) .ssnolist 主题
.tab size 将制表符设为 size 个字符 .tab 主题
.title "string" 在列表页标题中列印一个标题 .title 主题
.width [page width] 设定源代码列表的页宽度 .width 主题
表 5-7 用于引用其他文件的指令
助记符和语法 说明 请参阅
.copy ["]filename["] 包括来自另一个文件的源语句 .copy 主题
.include ["]filename["] 包括来自另一个文件的源语句 .include 主题
.mlib ["]filename["] 指定从中检索宏定义的宏库 .mlib 主题
表 5-8 会影响符号链接和可见性的指令
助记符和语法 说明 请参阅
.common symbol, size in bytes [, alignment]
.common symbol, structure tag [, alignment]
为变量定义通用符号。 .common 主题
.def symbol1[, ..., symboln] 标识在当前模块中定义并且可以在其他模块中使用的一个或多个符号。 .def 主题
.farcommon symbol, size in bytes [, alignment]r
.farcommon symbol, structure tag [, alignment]
在 far 存储器中定义通用符号。 .farcommon 主题
.global symbol1[, ..., symboln] 标识一个或多个全局(外部)符号。 .global 主题
.nearcommon symbol, size in bytes [, alignment]r
.nearcommon symbol, structure tag [, alignment]
在 near 存储器中定义通用符号。 .farcommon 主题
.ref symbol1[, ..., symboln] 标识用在当前模块中并在其他模块中定义的一个或多个符号。 .ref 主题
.symdepend dst symbol name[, src symbol name] 创建从段到符号的人工引用。 .symdepend 主题
.weak symbol name 标识用在当前模块中并在其他模块中定义的符号。 .weak 主题
表 5-9 定义符号的指令
助记符和语法 说明 请参阅
.asg ["]character string["], substitution symbol 替代符号 分配字符串。由 .asg 创建的替代符号可以重新定义。 .asg 主题
.clearmap 取消所有 .map 分配。供编译器用于线性汇编源。 .clearmap 主题
.define ["]character string["], substitution symbol 替代符号 分配字符串。由 .define 创建的替代符号无法重新定义。 .asg 主题
symbol .equ value 使 等同于符号 .equ 主题
.elfsym name, SYM_SIZE(size) 提供 ELF 符号信息 .elfsym 主题
.eval expression,
substitution symbol
对数字替代符号 执行算术运算 .eval 主题
.label symbol 在段中定义加载时可重定位标签 .label 主题
.map symbol/register 符号 分配给寄存器。供编译器用于线性汇编源。 .map 主题
.newblock 取消定义局部标签 .newblock 主题
symbol .set value 使 等同于符号 .set 主题
.unasg symbol 取消将符号 分配为替代符号 .unasg 主题
.undefine symbol 取消将符号 分配为替代符号 .unasg 主题
表 5-10 用于启用条件汇编的指令
助记符和语法 说明 请参阅
.if condition 如果条件 成立,则汇编代码块 .if 主题
.else 如果 .if 条件 为不成立,则汇编代码块。使用 .if 构造时,.else 构造是可选的。 .else 主题
.elseif condition 如果 .if 条件 不成立,且 .elseif 条件成立,则汇编代码块。使用 .if 构造时,.elseif 构造是可选的。 .elseif 主题
.endif 结束 .if 代码块 .endif 主题
.loop [count] 开始反复汇编代码块;循环计数由 count 确定。 .loop 主题
.break [end condition] 如果结束条件 成立,则结束 .loop 汇编。使用 .loop 构造时,.break 构造是可选的。 .break 主题
.endloop 结束 .loop 代码块 .endloop 主题
表 5-11 用于定义联合体或结构体类型的指令
助记符和语法 说明 请参阅
.cstruct 行为类似于 .struct,但添加了填充和对齐,就像对 C 结构体所做的那样 .cstruct 主题
.cunion 行为类似于 .union,但添加了填充和对齐,就像对 C 联合体所做的那样 .cunion 主题
.emember 在汇编代码中设置类似 C 语言的枚举类型  GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326.html#GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326
.endenum 在汇编代码中设置类似 C 语言的枚举类型  GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326.html#GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326
.endstruct 结束结构体定义 .cstruct 主题.struct 主题
.endunion 结束联合体定义 .cunion 主题.union 主题
.enum 在汇编代码中设置类似 C 语言的枚举类型 GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326.html#GUID-80FF7F5B-C37F-4D47-9818-5FEB26DDB326
.union 开始联合体定义 .union 主题
.struct 开始结构体定义 .struct 主题
.tag 为标签分配结构体属性 .cstruct 主题.struct 主题.union 主题
表 5-12 用于创建或影响宏的指令
助记符和语法 说明 请参阅
macname .macro [parameter1][,..., parametern ] 开始定义名为 macname 的宏 .macro 主题
.endm 终止宏定义 .endm 主题
.mexit 转至 .endm GUID-58E316FC-5FA0-446D-A056-1F17FC11EDA7.html#GUID-58E316FC-5FA0-446D-A056-1F17FC11EDA7
.mlib filename 识别包含宏定义的库 .mlib 主题
.var 将局部替代符号添加到宏的参数列表 .var 主题
表 5-13 用于控制诊断的指令
助记符和语法 说明 请参阅
.emsg string 将用户定义的错误信息发送至输出器件;不产生 .obj 文件 .emsg 主题
.mmsg string 将用户定义的消息发送至输出器件 .mmsg 主题
.noremark[num] 标识代码块的开头,在该代码块中,汇编器会抑制num 备注 .noremark 主题
.remark [num] 恢复先前被 .noremark 抑制的生成备注的默认行为 .remark 主题
.wmsg string 将用户定义的警告消息发送至输出器件 .wmsg 主题
表 5-14 用于执行汇编源代码调试的指令
助记符和语法 说明 请参阅
.asmfunc 标识包含函数的代码块的开头 .asmfunc 主题
.endasmfunc 标识包含函数的代码块的结尾 .endasmfunc 主题
表 5-15 用于执行其他函数的指令
助记符和语法 说明 请参阅
.cdecls [options,]"filename"[, "filename2"[, ...] 在 C 和汇编代码之间共享 C 头文件 .cdecls 主题
.end 终止程序 .end 主题
.nocmp 指示工具不要对段使用 16 位指令 .nocmp 主题

除了可以在代码中使用的汇编指令之外,C/C++ 编译器在创建汇编代码时还会生成若干指令。这些指令只能由编译器使用;请勿尝试使用这些指令:

  • GUID-C9A2A5D5-35D7-48C0-97B4-7AB14E1EBC38.html#GUID-C9A2A5D5-35D7-48C0-97B4-7AB14E1EBC38 中列出的 DWARF 指令
  • .battr 指令用于编码目标文件的编译属性。有关由 C6000 代码生成工具生成和使用的编译属性的更多信息,请参阅 C6000 嵌入式应用二进制接口 应用报告 (SPRAB89)。
  • .bound 指令仅在内部使用。
  • .comdat 指令仅在内部使用。
  • .compiler_opts 指令指示汇编代码是由编译器生成的,以及此文件使用的编译模型选项。
  • .tls 指令仅在内部使用。