当前位置:文档之家› 伪指令和命令文件

伪指令和命令文件

MS320LF2407的工程中主要包含头文件、库 的工程中主要包含头文件、 的工程中主要包含头文件 文件、命令文件、中断向量文件和程序源文件。 文件、命令文件、中断向量文件和程序源文件。 头文件中定义DSP系统用到的一些寄存器映射地 头文件中定义DSP系统用到的一些寄存器映射地 址。用户用到的常量和用户自定义的寄存器都在头 文件中定义,头文件名的后缀为.H。 文件中定义,头文件名的后缀为 。寄存器头文件 可以从其他文件或相关资料中复制, 可以从其他文件或相关资料中复制,或复制后根据 需要进行修改。 需要进行修改。 中断向量文件vectors.asm:定义了系统各种中断 : 中断向量文件 服务程序。 服务程序。
定义未初始化的段: 定义未初始化的段: 为未初始化的变量。 (1) .bss 为未初始化的变量 。 在 .bss段内保留存 ) 段内保留存 储器空间。 储器空间。 在未初始化命名段内保留空间。 (2) .usect 在未初始化命名段内保留空间。.usect ) 伪 指 令 和 .bss 伪 指 令 相 类 似 , 但 是 它 允 许 用 户 与 分开保留空间。 段.bss分开保留空间。 分开保留空间 定义初始化的段: 定义初始化的段: 创建具有绝对地址的初始化命名段。 (3) .asect 创建具有绝对地址的初始化命名段 。 ) 包含代码或数据。在绝对段内,用户可以使用.label 包含代码或数据。在绝对段内,用户可以使用 伪指令来定义可重定位标号。 伪指令来定义可重定位标号。 标示.text段内代码部分 , 是系统定义的 段内代码部分, (4). text 标示 ) 段内代码部分 默认段,如不明确声明,代码一般都放在该段中。 默认段,如不明确声明,代码一般都放在该段中。 用户可以自行定义初始化的段。 (5) .sect 用户可以自行定义初始化的段 。 用 .sect ) 定义的段可包含代码或数据。 定义的段可包含代码或数据。
已初始化的段含有真实的指令和数据,存放 在程序存储空间。程序存储空间在DSP片内 在程序存储空间。程序存储空间在DSP片内 是FLASH ,调试代码时,常常通过跳线 MP/MC,装载代码到片外的程序存储空间。 MP/MC,装载代码到片外的程序存储空间。 未初始化的段只是保留变量的地址空间,未 初始化的段存放在数据存储空间,数据存储 空间多为RAM存储单元。在DSP上调用 空间多为RAM存储单元。在DSP上调用 _c_int0初始化库前,未初始化的段并没有真 _c_int0初始化库前,未初始化的段并没有真 实的内容。
6、汇编时符号伪指令
(1).asg:把字符串赋给替代符号。 ) :把字符串赋给替代符号。 (2).set和.equ:把常量值赋予符号。 ) 和 :把常量值赋予符号。 ( 3) .struct/.endstruct: 建立类 语言的结构定 ) : 建立类C语言的结构定 不分配存储器, 义。不分配存储器,它们简单地创建可重复使用 的符号模板。 的符号模板。 的结构特性赋给标号。 (4).tag:把类 的结构特性赋给标号 。不分配 ) : 把类C的结构特性赋给标号 存储器,结构标号必须在使用之前定义。 存储器,结构标号必须在使用之前定义。 ( 4) .eval: 对表达式求值 , 把结果转化为字符 , ) : 对表达式求值, 把结果转化为字符, 并把字符赋给替代符号。 并把字符赋给替代符号。
Rts2xx.lib包含: 包含: 包含 ANSIC标准库; 标准库; 标准库 系统启动程序_c_int0; 系统启动程序 ; 允许C访问特殊指令的函数和宏 访问特殊指令的函数和宏。 允许 访问特殊指令的函数和宏。 rts2xx.lib库文件可在 库文件可在 “C:\CCStudio_v3.1\C2400\cgtools\lib”下找 下找 不能直接打开查看,一般不能修改。 到 。不能直接打开查看,一般不能修改。 程序源文件( 或 程序源文件(.C或.ASM)用于用户编写具有一定 ) 功能的程序。 功能的程序。
命令文件名的后缀为.CMD,命令文件实现对 , 命令文件名的后缀为 程序存储器空间和数据存储器空间的分配。 程序存储器空间和数据存储器空间的分配。文件常 用的伪指令有Memory和Sections伪指令。 伪指令。 用的伪指令有 和 伪指令 Memory:用来标示实际存在目标系统中且可被使 : 用的存储器范围,每个存储器范围具有名字, 用的存储器范围,每个存储器范围具有名字,起始 地址和长度。 地址和长度。 Sections :描述输入段怎样被组合到输出段内;在可 描述输入段怎样被组合到输出段内; 执行程序内定义输出段; 执行程序内定义输出段;规定在存储器内何处放置输 出段;允许重命名输出段。 出段;允许重命名输出段。
2、初始化常数的伪指令 、
(1).bes和.space:在当前段中保留特定的位数。汇编 ) 和 :在当前段中保留特定的位数。 器用0填充这些保留位 用户可以通过把位数乘16来保 填充这些保留位。 器用 填充这些保留位。用户可以通过把位数乘 来保 留规定的字数。 留规定的字数。 当使用.space的标号时,指向保留位的第一个字。 的标号时, 当使用 的标号时 指向保留位的第一个字。 当使用.bes的标号时,指向保留位的最后一个字。 的标号时, 当使用 的标号时 指向保留位的最后一个字。 ( 2) .byte: 将一个或多个 位的数值置入当前段连续 ) : 将一个或多个8位的数值置入当前段连续 的字中。除了每个数值的宽度限制为8位以外, 类似。 与.word类似。 类似 (3).field:将单个数值置入当前字规定的位数中。用 ) :将单个数值置入当前字规定的位数中。 户可以用.field伪指令将多个域 ( field) 组装到单个字 伪指令将多个域( 户可以用 伪指令将多个域 ) 在字被填满之前,汇编器将不使SPC增量。 增量。 中,在字被填满之前,汇编器将不使 增量
3、调准段程序计数器的伪指令
调准在128个字的边界。 确保跟 个字的边界。 (1).align:把SPC调准在 ) : 调准在 个字的边界 随在.align伪指令之后的代码从数据页边界处开始。 伪指令之后的代码从数据页边界处开始。 随在 伪指令之后的代码从数据页边界处开始 如果SPC已调至数据页的边界,它不再增量。 已调至数据页的边界, 如果 已调至数据页的边界 它不再增量。 (2).even:调准 ) :调准SPC,使其指向下一个完整的字。 ,使其指向下一个完整的字。 在 使 用 .field 伪 指 令 之 后 用 户 应 当 使 用 .even , 如 伪指令未填满一个字, 果.field伪指令未填满一个字,.even指令将使汇编器 伪指令未填满一个字 指令将使汇编器 填满,并用0填未用到的位 填未用到的位。 填满,并用 填未用到的位。
( 2) .loop/.break/.endloop: 告诉汇编器根据表达 ) : 式的值来重复地汇编代码块。 式的值来重复地汇编代码块。 .loop expression 标示可重复代码块的开始。 标示可重复代码块的开始。 .break expression 告诉汇编器当 告诉汇编器当.break表达式为假 表达式为假 时继续重复汇编;如果表达式为真,那么转移到紧 时继续重复汇编;如果表达式为真, 接在.endloop之后的代码。 之后的代码。 接在 之后的代码 .endloop 标志可重复块的末尾。 标志可重复块的末尾。
编译器处理段的过程为:每个源文件 都编泽成独立的目标文件(以后缀.obJ结 都编泽成独立的目标文件(以后缀.obJ结 尾),每个目标文件含有自己的段:连接器 把这些目标文件中相同段名的部分连接在 一起,生成最终的可执行文件(以后缀.out 一起,生成最终的可执行文件(以后缀.out 结尾) 结尾)。 段分为两大类:己初始化的段和未初 始化的段。 使用定义段的伪指令对这些段进行定 义,并把汇编语句程序的各部分与适当的 段联系起来。
7、其他伪指令
(1).end:终止汇编。它是一个程序的最后一条源 ) :终止汇编。 语句。此伪指令与文件结束符具有同样的效果。 语句。此伪指令与文件结束符具有同样的效果。 ( 2) .label: 定义一个特定的标号 , 表示当前段的 ) : 定义一个特定的标号, 装载地址。 装载地址 。 当段在一个地址处装载但在另一个地址 处运行时,该指令特别有用。 处运行时,该指令特别有用。 ( 3) .version: 告诉汇编器该代码是属于哪一种处 ) : 理器。 伪指令必须出现在指令之前, 理器。.version伪指令必须出现在指令之前,否则将 伪指令必须出现在指令之前 出错。 出错。
TMS320LF2407 伪指令和命令文件简介
一、2407中常用的伪指令简介 中常用的伪指令简介
1、定义段的伪指令 、 2、初始化常数的伪指令 、 3、调准段程序计数器的伪指令 、 4、引用其它文件的伪指令 、 5、条件汇编伪指令 、 6、汇编时符号伪指令 、 7、其他伪指令 、
1、定义段的伪指令 、
C语言程序送给编译器进行编译的时候是采 用了分段的方式,使用段可以实现模块化 编程,从而用更加灵活的方法来管理代码 和目标系统的内存空间。 这里模块化编程的意思就是说程序员可以 根据自己的愿意自由决定把哪些代码归属 到哪些段,然后加以不同的处理。比如, 把已初始化数据归属到一个段,未初始化 数据归属到一个段,而不是混杂在一起。
(4).float和.bfloat:计算单精度 位IEEE格式浮 ) 和 :计算单精度32位 格式浮 点数的值, 并存入当前段的两个连续的字中, 点数的值 , 并存入当前段的两个连续的字中 , 先 存储低字,后存储高字。 存储低字,后存储高字。 .bfloat: float前加 “ b”, 意味着保证定义的浮点 前加“ , : 前加 数不会跨越数据页的边界。 数不会跨越数据页的边界。 个或多个16位值置入当前 ( 5) .int和 .word: 将 2个或多个 位值置入当前 ) 和 : 个或多个 段的连续字中。 段的连续字中。 ( 6) .long和 .blong: 将 32位数值置入当前段连续 ) 和 : 位数值置入当前段连续 两个字中,先存放低位字。 两个字中,先存放低位字。 .blong:保证目标不会跨越数据页的边界。 :保证目标不会跨越数据页的边界。 (7).string:将8位字符从一个或多个字符串置入 ) : 位字符从一个或多个字符串置入 当前段。除了把两个字符组装入每一个字外, 类似。 与 .byte类似 。 需要时 , 字符串中最后一个字用空 类似 需要时, 字符( )填充。 字符(0)填充。
相关主题