第五章DSP汇编语言开发

合集下载

DSP软件开发-PPT课件

DSP软件开发-PPT课件
.copy/.include
.def
.global
.ref
将TMS320各寄存器名定义为全局 符号,这样就可以直接引用寄存器 (符号)
.set伪指令附一常数值给某个符号, Shift .set 5
也可以将符号常数赋给寄存器
ld #shift,A
AuxR1 .set AR1
MVMM AuxR1,sp
从其他文件读取源代码语句。
"cosine",512 "fft_data",1024
d_input: .usect
"d_input", 1024
fft_out: .usect
"fft_out", 512
STACK
.usect
"STACK",10
.bss
d_twid_idx,1
.bss
d_data_idx,1
.bss
d_grps_cnt,1
第一列开始 每区必须用一个或多个空格分开Tab字符键与空
格等效 程序中可以有注释,注释开始在第一列时,前面需标
上星号或分号(*或;),但在其他列开始的注释前面 只能标上分号
5
标号区 标号分大小写,且第一字符不能是数字,后面可以带
冒号(:),但冒号并不处理为标号名的一部分。标号实 际代表了该代码行在程序或数据段中的地址
.bss : > SPRAM
PAGE 1
sine : align(1024){ } > DARAM PAGE 1
15
.text 将代码或数据放入.text段中
.data 将数据放入.data段中
.sect 将代码或数据放入指定的段中。

第五章 DSP的汇编指令..

第五章 DSP的汇编指令..

令执行的条件:
TCx(测试/控制标志为1) !TCx(测试/控制标志为0)
TC1&TC2 TC1&!TC2 TC1|TC2 TC1|!TC2 TC1^TC2 TC1^!TC2
!TC1&TC2 !TC1&!TC2 !TC1|TC2 !TC1|!TC2 !TC1^TC2 !TC1^!TC2
第五章 TMS320C55x系列DSP的汇编指令
4、双16比特算术指令: [(1)语法、(2)操作数、(3)状态位] 在D单元中利用其ALU的双16比特模式,同时执行(并行)两个16
比特算术运算,包括加-减、减-加、两个加和两个减运算。
例:
▪ M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩
展和移位操作都以第31比特为准。
▪ M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40 ; Clear M40
BSET M40 ; Set M40
第五章 TMS320C55x系列DSP的汇编指令
第五章 TMS320C55x系列DSP的汇编指令
一、算术运算指令 用于完成加减乘除等运算,按照功能可分成以下几类:
▪ 加法指令 ▪ 减法指令:减法,条件减法,条件加/减 ▪ 乘法指令:乘法,乘加,乘减,双乘加/减 ▪ 双16比特算术指令 ▪ 比较运算指令:比较并求极值,最大/最小值,存储单元比较,寄存器比较 ▪ 移位指令:条件移位、带符号的移位。 ▪ 寄存器修改:辅助寄存器修改、堆栈指针SP修改 ▪ 隐含的并行指令 ▪ 专用指令:绝对值、归一化、有限冲激响应滤波FIR、最小均方LMS等
✓ M40=0时: 溢出位在第31位检测

DSP技术 第5章 TMS320C54x DSP的汇编语言程序设计

DSP技术 第5章 TMS320C54x DSP的汇编语言程序设计
第5章 TMS320C54x DSP的汇编语言程序设计
5.1 汇编语言程序编写方法 5.2 汇编语言的指令系统 5.3 TMS320C54x DSP汇编语言的编辑、汇 编与链接过程 5.4 汇编器 5.5 链接器
2020年7月5日
DSP原理及应用
1
Байду номын сангаас
5.1 汇编语言程序编写方法
TMS320C54x汇编语言源程序由指令性语句、 伪指令语句和宏指令语句构成。 指令性语句:能产生相应的机器代码 伪指令语句:不生成代码,在程序汇编时起指示作 用,如定义变量等 宏指令语句:有独立功能的一段程序代码
数据类型 二进制 八进制 十进制 十六进制 浮点数 字符 字符串
举例 b或1110001B 226q或572Q 1234或+1234或-11234 0A40h或0A40H或0xA40 1.623e-23 ‘D’ “this is a string”
说明 缺省型 仅用于C语言
2020年7月5日
DSP原理及应用
; 无效的表达式,Z还未定义 ; 定义Z,但应在表达式使用之前
2020年7月5日
DSP原理及应用
13
【例3】 有效定义的表达式。
label1
label2 X goodsym1 goodsym2 goodsym3 goodsym4
.data .word .word .word .word .set .set .set .set .set
汇编器不检查乘法的溢出状态。
条件表达式 汇编器支持关系运算符,可以用于任何表达式。
= 等于
= = 等于
!= 不等于
> = 大于或等于 < = 小于或等于 > 大于 < 小于

DSP原理及应用第五章

DSP原理及应用第五章

4 MBytes SDRAM
10
PC
C64x 入门套件: C6416 DSK
X
11
第5章 汇编语言程序开发工具
2. ’C54x的开发工具
(2)代码调试工具:
可扩展的开发系统仿真器(XDS510):可用来 进行系统级的集成调试,是进行DSP芯片软硬件开发 的最佳工具。 评价模块EVM板:是一种低成本的开发板,可 进行DSP芯片评价、性能评估和有限的系统调试。
X
29
第5章 汇编语言程序开发工具
5.4 链接器的使用
链接器的主要任务是根据链接命令文件(.cmd), 将一个或多个COFF目标文件链接起来,生成存储器映 像文件(.map)和可执行的输出文件(.out)。
X
12
C6701 评估板
X
13
第5章 汇编语言程序开发工具
5.2 汇编语言程序的编辑、汇编和链接过程
汇编语言源程序可以在任何一种文本编辑器中进行
。如笔记本、WORD、EDIT、TC等。
当汇编语言源程序编写完成后,还必须经过汇编和
链接后才能运行。
X
14
第5章 汇编语言程序开发工具
5.2 汇编语言程序的编辑、汇编和链接过程
① 将一个或多个COFF目标文件中的各种段作为
链接器的输入段,经链接后在一个执行的COFF输出
模块中建立各个输出段;
② 在程序装入时对其重新定位,为各个输出段
选定存储器地址。
X
23
第5章 汇编语言程序开发工具
5.3.3 链接器对段的处理 链接器有2条伪指令支持上述任务:
● MEMORY伪指令——用来定义目标系统的存储 器配置空间,包括对存储器各部分命名,以及规定 它们的起始地址和长度。 ● SECTIONS伪指令——用来指定链接器将输入 段组合成输出段方式,以及输出段在存储器中的位 置,也可用于指定子段。 若未使用伪指令,则链接器将使用目标处理器 默认的方法将段放入存储空间。

第5章TMS320C54x的汇编语言程序设计基础资料

第5章TMS320C54x的汇编语言程序设计基础资料
.text 段(文本段),通常包含可执行代码; .data 段(数据段),通常包含初始化数据; .bss 段(保留空间段),通常为未初始化变量保留存储空间。
2020年10月9日
DSP原理及应用
14
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.1 COFF文件的基本单元
1. 段(sections)
5.1 汇编语言程序的编辑、汇编、链接过程
3. 链接
所谓链接,就是利用’C54x的链接器LNK500 ,根据链接器命令文件(.cmd)对已汇编过的一个或 多个目标文件(.obj)进行链接,生成输出文件 (.out)和存储器映像文件(.map) 。
常用的汇编器命令:
lnk500 %1.cmd
l%n1k.5c0m0d: 调 链用 接链 命接 令器文命件令名,该文件须指明目标文件、 输入文件、输出文件、链接选项和存储器配置要求等。
2020年10月9日
DSP原理及应用
20
第5章 TMS320C54x的汇编语言程序设计 基础
5.2.2 汇编器对段的处理
1. 未初始化段 未初始化段就是在’C54x存储器中的保留空间
,通常将它们定位在RAM区。 在目标文件中,这些段中没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在
程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由
链接器的任务:即分配存储单元,将目标文件中的段重 新定位到目标系统的存储器中,这一过程称为定位或分配。
2020年10月9日
DSP原理及应用
18
第5章 TMS320C54x的汇编语言程序设计 基础
3. 段与目标存储器的对应关系
目标文件中的段与目标存储器之间的关系

第五章--TMS320C54x-DSP的汇编语言程序设计.

第五章--TMS320C54x-DSP的汇编语言程序设计.
否则汇编程序会致使出错。
5.1 汇编语言程序编写方法
2. 操作码项 在语句中一定有的是操作码项,用来说明所有进行的操作。 操作项是一个操作码的助记符,助记符包含指令性语句、伪
指令和宏命令。 对于指令性语句,一般用大写,汇编程序将其翻译为机器语
言指令。对于伪指令,汇编程序将根据其所要求的功能进 行处理,可以形成常数和变量,当用它控制汇编和链接过 程时,可以不占存储空间。对于宏命令,则将根据其定义 展开。伪指令和宏命令均以西文句号(.)开始,且为小写。
第五章 320C54x 的汇编语言程序设计
第五章 320C54x 的汇编语言程序设计 5.1汇编语言程序编写方法 5.2汇编语言的指令系统 5.3320C54x 汇编语言的编辑、汇编与链接过程 5.4汇编器 5.5链接器
第五章 320C54x 的汇编语言程序设计
的软件开发一般有以下几种方式: (1)直接编写汇编语言源程序; (2)编写C语言程序; (3)混合编程(既有C代码,又含汇编代码)。
5.1 汇编语言程序编写方法
表中运算符从上到下对应优先级由高到低。
表达式的执行顺序是先执行优先级高的运算后执行
优先级低的运算,圆括号内的表达式最先运算。
表达式溢出
在汇编过程中执行算术运算后,汇编器将检查溢出
状态,表达式值的有效范围为-32768~32767,超出此范围
就会改变溢出状态,出现溢出时,汇编器会发出值被截断
5.1 汇编语言程序编写方法
一、汇编语言源程序格式 汇编语言源程序中的每个语句可以由四项组成: [名字][:] 操作码 [操作数1,操作数2,…] [;注释]
其中,[ ]为可选项。 1. 名字项 名字项可以是标号或变量,用来表示本语句的符号地址,只有

5.基于C语言的DSP芯片开发

5.基于C语言的DSP芯片开发

CCS的C语言程序运行环境的缺省设置
对DSP芯片中影响运算结果的各状态比特位,设置缺省值
ARP、ASM、C、OVA/B、SXM、TC:可以在C语言中修改。 BRAF、C16、CMPT、CPL、FRCT:不可以在C语言中修改,且对于 CPL、FRCT若修改了其缺省值,该值必须由函数恢复。 OVM、SMUL:仅对指令有效。
4
muchunyang@
5.2 CCS支持的C语言
DSP开发软件中的C语言
TI公司运行支持库rts.lib文件的定制
rts.lib的源码保存在rts.src文件中
安装目录..\ti\c5400\cgtools\lib
rts.lib的内容
包含了ISO定义的标准运行支持函数、编译工具函数、浮点代数运算函 数、C语言I/O函数等。
与通用处理器(如80x86)一样,都是通过指令执行的方式实现各种功 能; 每种芯片结构不同,指令系统和机器操作码也不同; 汇编语言指令与芯片的结构紧密相关
采用汇编语言编写DSP程序 ① 优点:可以有效减少程序的运算量和存储量,代码效率比较高。 ② 缺点:需要掌握汇编指令,程序开发的周期相对较长;程序可读性 和可移植性较差,软件的修改和升级相对困难。
9
muchunyang@
5.2 CCS支持的C语言
5.2.1 变量和常数
5.2.1.2 变量的存储
变量、函数都具有存储类别——划分为4种
自动的(auto):缺省类型 静态的(static) ①利用关键字static定义,格式如下: static type varid; ②C54x等C编译器对静态变量的处理采用与全局变量相同的方法,在 整个程序执行期间变量均有效。 寄存器的(register) ①数据利用寄存器保存,指令处理起来比较快捷,可减少CPU对内存 的访问。 ②利用关键字register定义,格式如下: register type regid; ③C54x的编译器在一个函数里最多使用2个寄存器变量。 外部的(extern):数据或函数在另外的文件中定义,在使用时应声明为 extern类别。

(DSP 戴明帧主编)第5章汇编语言程序设计

(DSP 戴明帧主编)第5章汇编语言程序设计
◆ 堆栈设置: size .set stack .usect STM
;在RAM区开辟堆栈 120 “STACK”, size ;区,共120单元; #stack+size, SP ;将堆栈空间的高地址送堆 ;栈指针SP
设置好堆栈后,就可以使用堆栈了,如: CALL pmad ;(SP)-1→SP, (PC)+2→TOS,pmad→PC RET ;(TOS)→PC,(SP)+1→SP
15
指定堆栈空间 为变量预留空间
table: start:
初值序列
设置堆栈指针
初始化变量
end: SUM:
利用MAC和RPT求乘累加和
第5章 汇编语言程
ack
table: start:
end: SUM:
.title "Ex_543.asm“ ;为汇编语言源文件取名 .mmregs ;定义存储器映像寄存器 .usect "STACK", 10H ;为堆栈空间分配16个存储单元 .bss a,4 ;为系数a分配4个存储单元 .bss x,4 ;为变量x分配4个存储单元 .bss y,1 ;为变量y分配1个存储单元 .def start ;定义标号start .data ;定义数据代码 .word 1,2,3,4 ;为标号table开始的 .word 8,6,4,2 ; 8个存储单元赋值 .text ;定义文本代码段 STM #0, SWWSR ; SWWSR置0,不插等待周期 STM #stack+10H, SP ;设置堆栈指针 STM #a, AR1 ; AR1指向a的首地址 RPT #7 ;重复执行下条指令8次 MVPD table, *AR1+ ;从程序存储器向数据存储器,重复传递共8个数据 CALL SUM ;调用子程序SUM B end ;循环等待 STM #a, AR3 ;将系数a的首地址赋给AR3 STM #x, AR4 ;将变量x的首地址赋给AR4 RPTZ A, #3 ;将累加器清0,重复执行下条指令4次 MAC *AR3+, *AR4+, A;执行乘法累加运算,结果存入累计器A中 STL A, @y ;将结果(A的低16位)送往变量y存储单元 RET ;子程序返回 .end ;源程序结束 第5章 汇编语言程

DSP第五章 DSP的汇编指令

DSP第五章 DSP的汇编指令
M40=0时,D单元按32位运算模式,因此累加器溢出、进位、符号扩
展和移位操作都以第31比特为准。
M40=1时,D单元按40位运算模式,因此累加器溢出,进位,符号扩
展和移位操作都以第39比特为准。
BCLR M40
; Clear M40
BSET M40
; Set M40
第五章 TMS320C55x系列DSP的汇编指令
2、累加器溢出状态(ACOVx)
当AC0~AC3寄存器溢出时,目的累加器的溢出状态位ACOV0~3被置1。 以下情况会清零ACOVx位
复位; CPU执行一个跳转,条件调用,条件返回或执行一条测试ACOVx的指令; 通过BCLR指令清除; 溢出位检测受ST1_55中的M40位影响,即:
第五章 TMS320C55x系列DSP的汇编指令
(3)内置并行指令与用户自定义并行指令的混合形式 在不引起资源冲突的情况下,将隐含并行的指令按用户自定义 方式与另一条指令并行执行。例:
MPY *AR0, *CDP, AC0 ;隐含的或内置的并行指令 :: MPY *AR1, *CDP, AC1 ||MOV #5, AR1
பைடு நூலகம்
在实际编程时,只要指令满足这三条基本规则,即可写成并行
方式,然后进行编译。如果编译有错,则可参照书上详细规则进 行检测。
第五章 TMS320C55x系列DSP的汇编指令 5.4 TMS320C55x DSP的汇编指令
TMS320C55x DSP的汇编指令按操作分为以下6类 算术运算指令 比特操作指令 一条指令的属性包括: 语法(Syntax) 执行的操作 操作数 相关的状态位 是否有并行使能位 长度(Size) 执行周期(Cycles) 在流水线(Pipeline)上的执行阶段 在哪个功能单元执行(Executed) 是否可以重复执行等

第5章DSP汇编程序设计与开发10

第5章DSP汇编程序设计与开发10
15
COFF中的 COFF中的初始化段
段有两种基本类型:初始化段和未初始化段。 段有两种基本类型:初始化段和未初始化段。
初始化段包含可执行代码及初始化数据,如:text段、 包含可执行代码及初始化数据, text段
data段以及由汇编伪指令.sect产生的自定义段。 data段以及由汇编伪指令.sect产生的自定义段。 段以及由汇编伪指令.sect产生的自定义段
初始化段存储在目标文件中,每个初始化 Nhomakorabea都可以重新 存储在目标文件中,
定位, 被分配在ROM ROM中 定位,一般被分配在ROM中。 定义初始化段的伪指令有3个:. text、.data和.sect text、.data和.sect“ 定义初始化段的伪指令有3 段名” 段名”。 汇编过程中,遇到新的初始化段伪指令, 汇编过程中,遇到新的初始化段伪指令,汇编器将停止 汇编当前段,并将接下来的代码汇编进新的指定段, 汇编当前段,并将接下来的代码汇编进新的指定段,直到出现 下一个定义初始化段的伪指令。 下一个定义初始化段的伪指令。
11
代码汇编、 代码汇编、链接过程
源程序 汇编器 目标代码 .text段 段 .data段 段 .bss段 段 自定义段
cmd文件 cmd文件
链接器 目标存储器 片内ROM 片内 片外ROM 片外 片内RAM 片内 片外RAM 片外
12
COFF文件中的 COFF文件中的段
• “段”是COFF文件中的最小单位,是目标存储空间中一 COFF文件中的最小单位, 文件中的最小单位 段连续的代码、数据或保留空间。 段连续的代码、数据或保留空间。 • 汇编后的源代码被分类成各个不同的子段,并提供单独 汇编后的源代码被分类成各个不同的子段, 的段程序计数器SPC SPC。 的段程序计数器SPC。 • 按定义方式,“段”可分为标准定义段和自定义段两种: 可分为标准定义段和自定义段两种: .text,和 .bss, .text,和 .data 是标准定义段; .usect是 .sect, .usect是自定义段。 • 按基本类型,“段”可分为已初始化段和未初始化段两 种 .text, .data和 .sect,是已初始化段; .data和 .sect,是 .usect是 .bss 和 .usect是未初始化段。 13

第五章 TMS320C54x DSP的汇编语言程序设计

第五章  TMS320C54x DSP的汇编语言程序设计

二、汇编语言中的常数和字符串
常数、字符串和符号是汇编器能识别的数据项 ,是汇编指 令、伪指令和宏指令语句中操作数的基本组成部分。
1. 常数
◆ 汇编器支持6种类型的常数:二进制数、十进制数、八进制 数、十六进制数、字符常数和浮点常数。
2. 字符串
◆ 字符串是由双引号( “ ”)括起来的一 串字符 ,双引号是 字符串的一部分 。串的最大长度是变化的 ,并由每一个使 用字符串的伪指令定义 。字符串与字符常数不同 ,字符常 数代表一个单独的整数值 ,而字符串是字符的列表 。如: “simple ”。
首都师范大学信息工程学院
22
5 .4 汇编器
三、常用汇编伪指令 ◆ TMS320C54x DSP伪指令给程序提供数据和控制汇编过程。
◆ 具体实现以下任务:
(1)将数据和代码汇编进特定的段。 (2) 为未初始化的变量保留存储器空间。 (3)控制展开列表的形式。
(4)存储器初始化。 (5)汇编条件块。
操作
并行存储和相加/减 、并行存储和相乘 、其他加载和存储指令
首都师范大学信息工程学院
14
5 . 2 汇编语言的指令系统
一、指令系统中的符号和缩写 指令和操作码中的符号和缩写。
二、算术运算指令
算术运算指令可分为加法指令、减法指令、乘法指令、 乘加指令、乘减指令、双操作数指令和专用指令。 三、逻辑运算指令
NOP指令 ,还没有操作数。 4. 注释项 ◆ 注释项用来说明一条、几条指令或一段程序的功能 ,可以帮助用
户更快地理解程序 。对于编程者 ,应该重视注释的书写。 ◆ 注释从分号(; )开始 ,可以放在指令或伪指令的后面 ,也可以单
独占一行或数行。
首都师范大学信息工程学院

DSP精讲课件第5章 'C54x的汇编语言程序设计

DSP精讲课件第5章 'C54x的汇编语言程序设计

2016年11月11日
DSP原理及应用
7
第5章 TMS320C54x汇编语言程序设计
2. 符号常数
【例5.1.3】 定义符号常数举例。 N .set 512 buffer .set 4 * N nzg1 .set 1 nzg2 .set 2 nzg3 .set 3
2016年11月11日
DSP原理及应用
2016年11月11日 DSP原理及应用 11
第5章 TMS320C54x汇编语言程序设计
4. 局部标号
【例5.1.4】合法、非法局部标号$n举例。 假设符号ADDRA,ADDRB,ADDRC已经在前面作了定义。 Label1: LD ADDRA,A SUB ADDRB,A BC $1,ALT LD ADDRB,A B $2 $1 LD ADDRA,A $2 ADD ADDRC,A .newblock BC $1,ALT BC $1,ALT STL A,ADDRC STL $1 NOP A,ADDRC $1 NOP
1. 源文件格式 助记符指令源语句的每一行通常包含4个部分: 标号区、助记符区、操作数区和注释区。 助记符指令语法格式: [标号][:]
NANHUA
助记符
.set 1
[操作数]
[; 注释]
; 符号NANHUA=1
【例5.1.1】 助记符指令源语句举例。
Begin: 标 号
2016年11月11日
LD #NANHUA,AR1 ; 将1加载到AR1 助记符 操作数 注 释
第5章 TMS320C54x汇编语言程序设计
5. 比较转移程序 例如:比较操作后条件分支转移
STM STM … … … … CMPR BC
2016年11月11日

DSP第5章-F28335-概述

DSP第5章-F28335-概述

5.5 总结
低功耗模式。三种,IDLE、STANDBY、HALT
5.5 总结
低功耗模式。三种,IDLE、STANDBY、HALT
5.5 总结
外设帧0、1、2、3(PFn)。PF0:PIE、Flash、XINTF、 DMA、Timers、CSM、ADC;PF1:eCAN、GPIO、 ePWM、eCAP、eQEP;PF2:SYS、SCI、SPI、ADC、I2C、 XINT;PF3:McBSP.外设帧的寄存器映射如下图所示。
16*16和 32*32介质访问控制(MAC)运算;16*16双 MAC;哈佛总线架构;快速中断响应和处理能力;统一存储器 编程模型和高效代码(使用C/C++ 和汇编语言)。
6通道DMA处理器(用于ADC,McBSP,ePWM,XINTF ,SARAM)
5.1 F28335的性能
16位或32位外部接口(XINTF):可处理超过2M*16位 地址范围
5.5 总结
F28335(C28x+FPU)属TMS320C2000TMDSC。32位定 点+IEEE754的32位单精度浮点单元,支持C/C++,快速中断 响应与处理。
哈佛总线
外设总线:支持3种。外设1支持16/32位访问;外设2支持16 位访问;外设1支持DMA和16/32位访问;
实时在线仿真:IEEE1149.1 JTAG接口,可在系统运行、代码 执行或中断时观察内存、外设和寄存器的变化。
5.1 F28335的性能
串行端口外设:2个eCAN2.0B; 3个SCI(UART);2个 McBSP;1个SPI; 1个I2C总线接口。
16通道12位模数转换模块:转换时间80ns,2X8通道复用输入 接口;2个采样保持电路;单/连续通道转换;内部或外部参考电 压
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、COFF文件 汇编器和连接器建立的目标文件,是可以在C54x DSP器件上执行的文件。这些目标文件的格式称为公共目 标文件格式COFF (Common Object File Format )文件。 汇编器建立的是一种相对地址的COFF文件。汇编器根 据汇编命令用适当的段将各部分程序代码和数据连在一起, 构成目标文件。 连接器建立的是一种绝对地址的COFF文件。连接器建 立COFF文件时,要把各部分程序代码和数据段重新定位到 目标存储器中,也就是为各个程序代码或数据分配存储单 元。
③. 自定义段 自定义段,由用户定义的段,和默认的段.text .data .bss 的使用完全相同,而且独立分配,但是自定义段单独被汇 编,不和.text.data .bss混在一起。.usect和.bss类似,.sect 和与.data和.text类似。 语法格式如下: 标号 .usect “段名”,字数 .sect “段名” .asect “段名” ,地址
子段可以单独为其分配存储单元,或在基段之后。
⑤、段程序计数器(SPC)
汇编器为每个段都安排一个单独的程序计数器——段 程序计数器(SPC)。SPC表示一个程序代码段或数据段 内的当前地址。连接器在连接时对每个段进行重新定位。 汇编开始时,汇编器将每个SPC置0。当汇编器将程序 代码或数据加到一个段内时,相应的SPC就增加。如果再 继续对某个段汇编,则相应的SPC就在先前的数值上继续 增加。连接器在连接时要对每个段进行重新定位。
例5-2: 汇编源程序经汇编后的列表文件(段命令的应用):
该例中一共建立了5个段: .text段: 段内有10个字的程序代码。 .data段: 段内有7个字的数据。 vectors段: 是一个用.sect建立的自定义段,段 内有2个字的已初始化数据。 .bss段: 在存储器中为变量保留了10个存储 单元。 newvars段: 用.usect建立的自定义段,在存储器 B y .def x
.ref
y
;定义x ;引用y ;x在此模块中定义, ;可被别的模块引用 ;y在这里引用, ;它在别的模块中定义
注意: 汇编时,汇编器把x和y都放在目标文件的符号表中。 连接器必须使所引用的符号与相应的定义相匹配。如果连接 器不能找到某个符号的定义,就给出不能辨认所引用符号的 出错信息。
Label:列出汇编时定义和引用的每一个符号。 Value:列出一个赋给符号的4位十六进制数值或属性说明。 DEFN: 列出定义符号的语句编号。 REF: 列出引用此符号的语句的行号,如在第4行和第28行都引 用了proc符号。
VALUE的符号说明: REF :外部引用(.global) UNDF :未曾定义过 ’ :在.text段定义的符号。 ” :在.data段定义的符号。 + :在.sect段定义的符号。 - :在.bss或.usect段定义的符号。
1、COFF文件中的段 (1) COFF文件的种类: COFF0 (标题占用20字节,段标题占用40个字节) COFF1 (标题占用22字节,段标题占用40个字节) COFF2 (标题占用22字节,段标题占用48个字节) 不同种类的COFF文件,标题格式不相同,标题中说 明COFF文件的版本信息和适用的芯片等,段标题中说明段 的名称,地址和段的大小等,而数据部分是相同。 C54x汇编器和C编译器建立的是COFF2文件。C54x 能够读/写所有形式的COFF文件,缺省值下连接器生成的 是COFF2文件。
(2) 段是一个目标文件的最小单元。段是一个代码或数 块,它们最终将在内存空间中占用相邻的空间。一个目标文 件中的每一个段都是分开的和不相同的。所有的COFF文件 都包含下面3种形式的段,段在存储器中占用连续的存储空 间,所有的段分成两类,已初始化段和未初始化段: .text 段,已初始化段,通常包含可执行的代码; .data 段,已初始化段,通常包含初始化了的数据; .bss 段,未初始化段,为未初始化变量保留存储空间。 另外,汇编器和连接器可以建立、命名和连接自定义的 段。段在目标文件中与.data、.text和.bss段分开汇编,连 接时将作为一个单独的部分分配到存储器。
1、常用的汇编命令
常用的汇编命令(续)
§5.2 C54x汇编源程序的汇编
一、汇编器 (1)汇编器的作用和使用 汇编器可以将汇编源程序汇编成可重定位的目标文件 (.obj文件),需要时,可以生成列表文件(.lst文 件)。汇编器能够将程序代码分段,每段的目标代码都 有一个SPC管理,汇编器可以定义和引用全局符号,可 在列表后附加交叉引用表。汇编器支持宏功能,允许定 义宏命令。 对汇编源程序的汇编可以在CCS软件环境下,运行 Project/Build 命令完成,也可以在命令行中运行 asm500.exe实现。 使用asm500的方法: asm500 [input file [object file [listing file]]] [-options] 例如: axm500 c54x.asm -l -s -x 源程序c54x.asm经汇编后将生成一个c54x. obj目标 文件、列表文件、符号表(在目标文件中)以及交叉引用 表(在列表文件中)。
§5.3 C54x目标文件的连接
1、连接器 连接器的作用是根据连接命令或连接命令文件(.cmd 文件),将一个或多个COFF目标文件连接起来,生成存储 器映象文件(.map)和可执行的输出文件(.out)。 对目标文件的连接可以在CCS软件环境下,运行 Project/Build命令完成连接,也可以在命令行环境运行 lnk500.exe实现。 使用lnk500的方法: lnk500 file1.obj file2.obj -o link.out 或者: Lnk500 linker.cmd linker.cmd file1.obj file2.obj -o link.out
2、连接器选项
3、连接器对段的处理 连接器在处理段时,有两个主要任务: (1)把一个或多个COFF目标文件中的各种段作为连接器的 输入,经连接后在一个可执行的COFF输出模块中建立 各个输出段。 (2)为各个输出段选定存储器地址。
为完成以上任务,连接器有两条命令: (1)MEMORY命令 用来定义系统的目标存储器配置图,包括对存储器各部 分命名,以及规定他们的起始地址和长度。 (2)SECTION命令 告诉连接器如何将输入段组合成输出段,以及将输出段放 在存储器中的什么位置。
2、汇编器对段的处理 确定汇编语言源程序的各个部分属于那个特定的段。有六个命令来 完成这种功能,即:.bss, .usect(创建未初始化的段).text, .data, .sect, .asect(创建已初始化的块,.asect 带有绝对地址,不推 荐使用)。
①. 未初始化段 主要用来在存储器中保留空间,他们通常被分配到RAM中。这些 段在目标文件中没有实际的内容,只是保留空间而已。程序在运行时 利用这些空间来建立和存储变量。 .bss命令在.bss段中保留空间; .usect命令在自定义的段中保留空间。 用法: .bss 符号 字数 符号 .usect “段名”,字数 其中,符号指向有.bss或.usect 命令保留的第一个字,它对应于变 量保留空间的变量名,可以在其它任何块中被访问。字数表示空间的 大小。 “段名”是程序员为自定义未初始化的段起的名字。
②. 已初始化段 已初始化的段包含可执行的代码和初始化之后的数据(常数),一 般放在ROM或FLASH中。汇编命令有.text .data .sect .asect 。.asect 是绝对地址自定义段,所定义的段被分配到汇编命令指定的地址。 用法: . text [ 段起点] .data [段起点] .sect “段名” [,段起点] .asect “段名”,地址 汇编时遇到初始化段的汇编命令,汇编器会终止当前正在汇编的 段,然后处理下面紧跟着的程序代码或数据。而遇到未初始化段的汇 编命令,则会为未初始化段开辟新的空间,然后返回到正在进行的初 始化段的汇编过程。 段起点是任选项,如果选用就是为段程序计数器SPC设定一个初 值,如果没有,SPC=0。
(2)汇编器选项
二、列表文件 汇编器对源程序进行汇编时,如果采用了-l 选项,汇编后将产生一 个列表文件,其中包括源程序语句和目标代码。
Field 1:源程序语句的行号,用十进制数表示。行号前面的字母,表示 从包含文件汇编的;前面的数字,表示嵌入的宏展开或循环 块。 Field 2:段程序计数器(SPC),用十六进制数表示。 Field 3:目标代码,用十六进制数表示。 Field 4:源程序语句。
2、助记符: 用于助记符指令、汇编指令、宏指令和宏调用。 ① 作为助记符指令,一般用大写; ② 汇编命令和宏命令,以英文句号“.”开始,且 为小写; ③ 汇编命令可以形成常数和变量,当用它控制汇 编和连接过程时,可以不占存储空间; ④ 指令和汇编命令都不能写在第1列。
3、操作数和注释 操作数:指令中的操作数或汇编命令中定义的内容。 ① 操作数可以不只一个,操作数之间必须用逗号“,” 分开; ② 有的指令无操作数,如NOP,RESET。 注释:注释是对指令的说明,注释是任选项。 ① 注释从分号“;”开始,可以放在指令或汇编命令的 后面,也可以放在单独的一行或多行; ② 如果注释从第1列开始,也可以用“*”号。
二、汇编命令(伪指令) 汇编命令是用来为程序提供数据和控制汇编进程 的。C54x汇编命令共有64条,其主要功能包括: 1、将代码和数据汇编到指定的位置。 2、在存储器中为未初始化的变量保留存储空间。 3 、控制列表的方式。 4、初始化存储器。 5、引用其他文件。 6、控制条件汇编。 7、在汇编时定义符号。 8、执行其他功能。 等等。 Ref: TMS320C54x Assembly Language Tools User’s Guide
第五章 DSP汇编语言程 序开发 (1)
§5.1 C54x汇编语言指令
一、C54x汇编指令 汇编语言源程序是以.asm作为扩展名。 汇编语言源程序中的每一行都可以由4个部分组成:
相关文档
最新文档