图书目录

目录

第1部分汇编语言工具

第1章汇编语言工具概述

1.1软件开发工具概述

1.2软件开发工具介绍

第2章通用目标文件格式介绍

2.1COFF文件类型

2.2段

2.3汇编器对段的处理

2.3.1未初始化段

2.3.2已初始化段

2.3.3已命名段

2.3.4子段

2.3.5段程序计数器

2.3.6使用段伪指令的实例

2.4连接器如何处理段

2.4.1默认的存储器分配

2.4.2将段放在存储器映像中

2.5重新定位

2.6运行时重新定位

2.7加载一个程序

2.8COFF文件中的符号

2.8.1外部符号

2.8.2符号表

第3章汇编器

3.1汇编器概述

3.2调用汇编器

3.3C54x汇编器的特点

3.3.1字节/字寻址

3.3.2并行指令规则

3.3.3变长指令长度的确定

3.3.4存储器模式

3.3.5使用MMR地址时的汇编器警告

3.4为汇编器的输入命名备用的文件和路径

3.4.1使用i汇编器选项

3.4.2使用环境变量(C54X_A_DIR和A_DIR)

3.5源程序语句的格式

3.5.1源程序语句的语法

3.5.2标号字段

3.5.3助记符指令字段

3.5.4代数指令字段

3.5.5注释字段

3.6常数

3.6.1二进制整数

3.6.2八进制整数

3.6.3十进制整数

3.6.4十六进制整数

3.6.5字符常数

3.6.6汇编时常数

3.6.7浮点常数

3.7字符串

3.8符号

3.8.1标号

3.8.2符号常数

3.8.3用d选项定义符号常数

3.8.4预定义的符号常数

3.8.5替代符号

3.8.6局部标号

3.9表达式

3.9.1运算符

3.9.2表达式的上溢和下溢

3.9.3完整定义的表达式

3.9.4条件表达式

3.9.5可重新定位符号和合法的表达式

3.10内置函数

3.11源列表

3.12交叉引用列表

第4章汇编伪指令

4.1伪指令概述

4.2与TMS320C1x/C2x/C2xx/C5x汇编器伪指令的兼容性

4.3用于段定义的伪指令

4.4用于初始化常量的伪指令

4.5调整段计数器的伪指令

4.6用于规范输出列表的伪指令

4.7用于调用其他文件的伪指令

4.8条件汇编伪指令

4.9汇编时符号伪指令

4.10其他伪指令

4.11伪指令参考信息

第5章宏语言

5.1宏的使用

5.2定义宏

5.3宏参数/替代符号

5.3.1定义替代符号的伪指令

5.3.2内置的替代符号函数

5.3.3递归替代符号

5.3.4强制替代

5.3.5访问带下标的替代符号中的独立字符

5.3.6替代符号作为宏内的局部变量

5.4宏库

5.5在宏中使用条件汇编

5.6在宏中使用标号

5.7在宏中产生信息

5.8输出列表的格式化

5.9使用递归和嵌套的宏

5.10宏伪指令总结

第6章连接器描述

6.1连接器概述

6.2如何调用连接器

6.3连接器选项

6.3.1重新定位能力(a和r选项)

6.3.2禁止符号调试信息的合并(b选项)

6.3.3C语言选项(c和cr选项)

6.3.4定义程序入口(e global_symbol 选项)

6.3.5设置默认的填充值(f cc 选项)

6.3.6将符号指定为全局符号(g global_symbol 选项)

6.3.7指定所有全局符号为静态(h选项)

6.3.8定义堆的大小(heap constant 选项)

6.3.9改变库搜索算法(l选项、i选项和C54X_C_DIR/C_DIR

环境变量)

6.3.10禁止条件连接(j选项)

6.3.11忽略定位标志(k选项)

6.3.12产生映像文件(m filename选项)

6.3.13命名一个输出模块(o filename选项)

6.3.14指定静态运行(q选项)

6.3.15删除符号信息(s选项)

6.3.16定义堆栈大小(stack constant选项)

6.3.17定义二级堆栈大小(sysstack constant选项)

6.3.18引入一个未确定的符号(u symbol 选项)

6.3.19指定一个COFF格式(v选项)

6.3.20显示输出段的信息(w选项)

6.3.21穷举读库(x和priority选项)

6.4字节寻址/字寻址

6.5连接器命令文件

6.5.1连接器命令文件中的保留名

6.5.2命令文件中的常量

6.6目标库

6.7MEMORY伪指令

6.7.1默认的存储器模型

6.7.2MEMORY伪指令的语法

6.8SECTIONS伪指令

6.8.1SECTIONS 伪指令的语法格式

6.8.2地址分配

6.8.3把存档库的一个成员分配到输出段

6.8.4使用多个存储器区域进行地址分配

6.8.5输出段在非连续存储器区域间的自动分割

6.9指定一个段的加载地址和运行地址

6.9.1指定加载地址和运行地址

6.9.2未初始化段

6.9.3使用.label伪指令引用加载地址

6.10使用UNION(联合段)和GROUP(成组段)语句

6.10.1用UNION语句使段重叠

6.10.2将输出段组合成组

6.10.3嵌套的联合段(UNION)和成组段(GROUP)

6.10.4检查地址分配的一致性

6.11重叠页

6.11.1使用MEMORY伪指令定义重叠页

6.11.2用SECTIONS伪指令定义重叠页

6.11.3页定义的语法格式

6.12默认的地址分配算法

6.12.1地址分配算法

6.12.2输出段的通常规则

6.13特殊的段类型(DSECT、COPY和NOLOAD)

6.14连接时给符号赋值

6.14.1赋值语句的语法

6.14.2将段程序计数器SPC值赋给一个符号

6.14.3赋值表达式

6.14.4连接器定义的符号

6.14.5只有C语言支持的符号定义(c或cr选项)

6.15产生和填充存储器空位

6.15.1已初始化段和未初始化段

6.15.2创建空位

6.15.3填充空位

6.15.4对未初始化段的显式初始化

6.16部分连接

6.17连接C/C++代码

6.17.1运行时的初始化

6.17.2目标库以及运行时的支持

6.17.3设置堆栈和堆的大小

6.17.4自动初始化(ROM和RAM模式)

6.17.5连接器选项c和cr

6.18连接器举例

第7章文档管理器

7.1文档管理器概述

7.2调用文档管理器

7.3文档管理器举例

第8章绝对地址列表器描述

8.1产生绝对地址列表

8.2调用绝对地址列表器

8.3绝对地址列表器用例

第9章交叉引用列表器描述

9.1交叉引用列表的产生

9.2调用交叉引用列表器

9.3交叉引用列表举例

第10章十六进制转换工具

10.1调用十六进制转换工具

10.2命令文件

10.2.1命令文件例子

10.3存储器宽度

10.3.1目标宽度

10.3.2数据宽度

10.3.3存储器宽度

10.3.4ROM宽度

10.3.5一个存储器配置实例

10.3.6指定输出字的顺序

10.4ROMS伪指令

10.4.1何时使用ROMS伪指令

10.4.2ROMS伪指令的一个例子

10.4.3创建ROMS伪指令

10.5SECTIONS伪指令

10.6输出文件名

10.6.1指定输出文件名

10.7映像模式和fill选项

10.7.1image选项

10.7.2指定填充值

10.7.3映像模式的运行步骤

10.8为片内引导加载器创建一个引导表

10.8.1引导表说明

10.8.2引导表的格式

10.8.3怎样创建引导表

10.8.4从器件的外设引导

10.8.5设置引导表的入口

10.8.6使用C54x引导加载器

10.9控制ROM器件的地址

10.9.1控制起始地址

10.9.2控制地址递增索引

10.9.3byte选项

10.9.4处理地址空位

10.10目标格式的描述

10.10.1ASCIIHex目标格式(a选项)

10.10.2Intel MCS86目标格式(i选项)

10.10.3MotorolaS目标格式(m1、m2、m3选项)

10.10.4TITagged目标格式(t选项)

10.10.5扩展的Tektronix目标格式(x选项)

10.11十六进制转换工具的错误提示信息

第11章助记符到代数语言的转换器描述

11.1转换器概述

11.1.1转换器做什么

11.1.2转换器不能做什么

11.2调用转换器

11.3转换器模式

11.3.1文字模式(t选项)

11.3.2关于文字模式中的符号名

11.3.3扩展模式(e选项)

11.4转换器对宏的处理

11.4.1宏中的伪指令

11.4.2宏的局部变量

11.4.3调用宏时定义的标号

第2部分C 编 译 器

第12章C/C++编译器概述

12.1C/C++编译器简介

12.1.1ISO标准

12.1.2输出文件

12.1.3编译器接口

12.1.4编译器的操作

12.1.5辅助工具

12.2编译器与代码生成工具包(CCS)

第13章C/C++编译器的使用

13.1关于编译器

13.2C/C++ 编译器的调用方法

13.3用选项控制编译器的操作

13.3.1常用选项

13.3.2指定文件名

13.3.3改变编译器对文件名的类型识别规则(fa、fc、fg、fo和fp

选项)

13.3.4改变编译器对文件名和扩展名的命名规则(e选项)

13.3.5指定目录

13.3.6控制汇编器的选项

13.4使用环境变量

13.4.1指定路径(C_DIR和C54X_C_DIR)

13.4.2设置默认的编译器选项(C_OPTION和C54X_C_OPTION)

13.5控制预处理器

13.5.1预定义的宏名

13.5.2#include文件的搜索路径

13.5.3产生预处理列表文件(ppo选项)

13.5.4预处理之后的继续编译(ppa选项)

13.5.5产生带有注释的预处理列表文件(ppc选项)

13.5.6产生带有行控制信息的预处理列表文件(ppl选项)

13.5.7为代码生成工具产生预处理输出(ppd 选项)

13.5.8创建包含#include伪指令的文件列表(ppi选项)

13.6理解诊断信息

13.6.1控制诊断信息

13.6.2怎样使用诊断屏蔽选项

13.6.3其他信息

13.7产生交叉引用列表信息(px选项)

13.8创建一个原始的列表文件(pl选项)

13.9使用内联函数展开

13.9.1Intrinsic操作的内联

13.9.2非保护的定义控制内联

13.9.3保护的内联以及_INLINE预处理符号

13.9.4有关内联的限制

13.10使用交互列表

第14章优化代码

14.1优化器的使用

14.2执行文件级优化(用O3选项)

14.2.1控制文件级优化(Ol选项)

14.2.2生成一个优化信息文件(on选项)

14.3执行程序级优化(pm和O3选项)

14.3.1控制程序级的优化(op选项)

14.3.2C与汇编语言混合编程时的优化考虑

14.4关于在优化代码中使用asm语句的警告

14.5在已经优化的代码中访问别名变量

14.6自动内联展开(oi选项)

14.7优化时使用交互列表工具

14.8调试优化后的代码

14.8.1调试优化后的代码(g、gw和o选项)

14.8.2剖析已优化代码(gp和o选项)

14.9哪种优化正在执行

14.9.1基于开销的寄存器分配

14.9.2消除别名的歧义性

14.9.3跳转的优化和控制流的简化

14.9.4数据流的优化

14.9.5表达式的简化

14.9.6函数的内联展开

14.9.7索引变量和效用简化

14.9.8循环中固定代码的移出

14.9.9循环转换

14.9.10向后合并

14.9.11自增型寻址

14.9.12循环执行程序块

14.9.13延时的跳转、调用和返回

14.9.14代数重排、符号简化、常数合并

第15章C54x的C语言

15.1TMS320C54x的C语言特点

15.1.1标识符和常数

15.1.2数据类型

15.1.3类型转换

15.1.4表达式

15.1.5声明

15.1.6预处理器

15.2TMS320C54x的C++语言特点

15.3数据类型

15.4关键字

15.4.1const关键字

15.4.2ioport关键字

15.4.3interrupt关键字

15.4.4near和far关键字

15.4.5volatile关键字

15.5寄存器变量

15.6全局寄存器变量

15.7asm语句

15.8Pragma伪指令

15.8.1CODE_SECTION Pragma

15.8.2DATA_SECTION Pragma

15.8.3FUNC_CANNOT_INLINE Pragma

15.8.4FUNC_EXT_CALLED Pragma

15.8.5FUNC_IS_PURE Pragma

15.8.6FUNC_IS_SYSTEM Pragma

15.8.7FUNC_NEVER_RETURNS Pragma

15.8.8FUNC_NO_GLOBAL_ASG Pragma

15.8.9FUNC_NO_IND_ASG Pragma

15.8.10IDENT Pragma

15.8.11INTERRUPT Pragma

15.8.12NO_INTERRUPT Pragma

15.9创建连接名

15.10初始化静态变量和全局变量

15.10.1用类型限定词const来初始化静态变量和全局变量

15.11改变ISO C语言模式(pk、pr和ps选项)

15.11.1与K&R C的兼容(pk选项)

15.11.2使能严格ISO模式和非严格ISO模式(ps和pr选项)

15.11.3使能嵌入式C++模式(pe选项)

15.12编译器的限制

第16章运行时环境

16.1存储器模式

16.1.1段

16.1.2C/C++系统堆栈

16.1.3在程序存储器中给.const分配空间

16.1.4动态存储器分配

16.1.5变量的初始化

16.1.6给静态变量和全局变量分配存储器

16.1.7位域/结构体的定位

16.2字符串常量

16.3寄存器使用规则

16.3.1状态寄存器

16.3.2寄存器变量

16.4函数结构和调用规则

16.4.1函数如何产生调用

16.4.2被调用函数如何响应

16.4.3参数和局部变量的访问

16.4.4分配帧和使用32位存储器读指令

16.5C/C++与汇编语言的接口

16.5.1在C/C++代码中使用汇编语言模块

16.5.2在C/C++程序中访问汇编语言变量

16.5.3使用内嵌的汇编语言

16.5.4使用内在函数(intrinsics)访问汇编语言语句

16.6中断管理

16.6.1关于中断的几个要点

16.6.2使用C/C++中断服务程序

16.6.3在中断入口处保存运行状态

16.7整数表达式分析

16.7.1运算的上溢和下溢

16.7.2带RTS调用的求值运算

16.7.3用C代码访问16位乘法的高16位

16.8浮点表达式分析

16.9系统初始化

16.9.1变量的自动初始化

16.9.2全局结构

16.9.3初始化表

16.9.4运行时的变量自动初始化

16.9.5加载时变量的自动初始化

第17章运行时支持函数

17.1库

17.1.1rts.src中的非标准头文件

17.1.2修改库函数

17.1.3用不同选项建库

17.2C语言的I/O函数

17.2.1低级I/O操作概述

17.2.2为C语言I/O添加设备

17.3头文件

17.3.1诊断信息(assert.h/cassert)

17.3.2字符分类(charactertyping)和转换(ctype.h/cctype)

17.3.3出错报告(errno.h/cerrno)

17.3.4扩展寻址函数(extaddr.h)

17.3.5低级I/O函数(file.h)

17.3.6取值范围的限制(float.h/cfloat和limits.h/climits)

17.3.7浮点数学(math.h/cmath)

17.3.8非局部跳转(setjmp.h/csetjmp)

17.3.9可变参数(stdarg.h/cstdarg)

17.3.10标准定义(stddef.h/cstddef)

17.3.11输入/输出函数(stdio.h/cstdio)

17.3.12通用工具(stdlib.h/cstdlib)

17.3.13字符串函数(string.h/cstring)

17.3.14时间函数(time.h/ctime)

17.3.15异常处理(exception和stdexcept)

17.3.16动态存储器管理(new)

17.3.17运行时类型信息(typeinfo)

17.4运行时支持函数和宏总结

17.5运行时支持函数和宏的描述

第18章建库工具

18.1调用建库工具

18.2建库工具选项

18.3选项汇总

第19章C++的名称复原

19.1调用C++的名称复原工具

19.2C++名称复原工具选项

19.3C++名称复原工具的用例

第3部分汇编语言指令集

第20章汇编语言指令集概述

20.1指令集符号和缩略语

20.2指令说明的例子

第21章指令集概述

21.1算术操作

21.2逻辑操作

21.3程序控制操作

21.4加载和存储操作

21.5循环执行一条指令

第22章汇编语言指令