第5章 TMS320C54x汇编语言程序设计
第5章TMS320C54x的汇编语言程序设计
也可以用.set伪指令将符号常数赋给寄 存器名。此时,该符号变成了寄存器替代 名。例如: AuxR1 .set AR1 MVMM AuxR1,SP ⑺ 字符常数 字符常数是包括单引号内的字符串。若 单引号之间没有字符,则值为0。每个字符 在内部表示为8位ASCⅡ码。例如: ‘a‟ 内部表示为61h „B‟ 内部表示为42h
第5章
TMS320C54x的汇编语言程序设计
知识要点:本章涉及的内容包括汇编语言 源程序的格式、常数、字符串、符号和表 达式的规定;堆栈的使用方法;分支、调 用、返回等控制程序;加法、乘法、除法、 长字和并行等算术运算程序;单指令、块 重复、循环嵌套等重复操作程序;数据块 传送程序;小数运算程序以及浮点运算程 序等。
例5.1.5 name?形式的局部标号的使用
; 局部标号‘ mylab’ 的第一个定义 nop mylab? nop b mylab? nop b mylab? mylab? .newblock mylab? .word 0 mylab? .word 0 nop nop b mylab?
maymac
下面举例说明局部标号$n的格式。该例中假设符号 ADDRA, ADDRB, ADDRC已经在前面做了定义。 例5.1.4 合法、非法局部标号$n举例。 ① 合法使用局部标号的代码段 Label1: LD ADDRA, A ;将ADDRA装入A SUB ADDRB, A ;A减去地址ADDRB BC $1, ALT ;结果小于0,转到$1 LD ADDRB, A ;否则将ADDRB装入A B $2 ;转移到$2 $1 LD ADDRA, A ;将ADDRA装入A $2 ADD ADDRC, A ;加上ADDRC .newblock ;取消$1 的定义,使它可再 次被使用 BC $1, ALT ;若小于0,转移到$1 STL A, ADDRC ;存A低16位 $1 NOP
DSP应用技术教程部分习题答案
《TMS320C54x DSP应用技术教程》部分习题答案注意:未提供的参考答案习题(因考试为开卷形式.部分在课堂讲过.部分需要自行思考归纳总结或编程).请参考PPT和书上示例.自行解答。
第1章绪论1.简述Digital Signal Processing 和Digital Signal Processor 之间的区别与联系。
答:前者指数字信号处理的理论和方法.后者则指用于数字信号处理的可编程微处理器.简称数字信号处理器。
数字信号处理器不仅具有可编程性.而且其数字运算的速度远远超过通用微处理器.是一种适合于数字信号处理的高性能微处理器。
数字信号处理器已成为数字信号处理技术和实际应用之间的桥梁.并进一步促进了数字信号处理技术的发展.也极大地拓展了数字信号处理技术的应用领域。
2.什么是DSP技术?答:DSP技术是指使用通用DSP处理器或基于DSP核的专用器件.来实现数字信号处理的方法和技术.完成有关的任务。
5.数字信号处理的实现方法有哪些?答:参见P3-4 1.1.3节。
6.DSP的结构特点有哪些?答:哈佛结构和改进的哈佛结构、多总线结构、流水线技术、多处理单元、特殊的DSP指令、指令周期短、运算精度高、硬件配置强。
7.什么是哈佛结构和冯洛伊曼结构?它们有什么区别?答:参见P5-6 1.2.2节。
8.什么是哈佛结构和冯.诺依曼结构?它们有什么区别?答:DSP处理器将程序代码和数据的存储空间分开.各空间有自己独立的地址总线和数据总线.可独立编址和独立访问.可对程序和数据进行独立传输.这就是哈佛结构。
以奔腾为代表的通用微处理器.其程序代码和数据共用一个公共的存储空间和单一的地址和数据总线.取指令和取操作数都是通过一条总线分时进行的.这样的结构称为冯·诺伊曼结构。
采用哈佛结构.可同时取指令和取操作数.并行地进行指令和数据的处理.从而可以大大地提高运算的速度.非常适合于实时的数字信号处理。
而冯·诺伊曼结构当进行高速运算时.取指令和取操作数是分时操作的.这样很容易造成数据传输通道的瓶颈现象.其工作速度较慢。
第5章TMS320C54x的汇编语言程序设计报告
5.1.1 汇编语言源程序格式
汇编语言程序以.asm为扩展名,可以用任 意的编辑器编写源文件。 一句程序占源程序的一行,每行字符最多 200个,如果长度超过200,则汇编器截去 行尾的多余字符,并发出一个警告。
⑵ 操作数区 操作数区是跟在助记符区后面的一系列操作 数,由一个和多个空格分开。 操作数可以是符号、常数或是符号与常数组 合的表达式。操作数之间一定用逗号“,”分开。 对操作数前缀的规定。汇编器允许将常数、 符号或表达式作为地址、立即数或间接地址。指 令操作数遵循以下规定: ◇前缀“#”后面的操作数是一个立即数。 ◇前缀“*”后面的操作数是一个间接地址。
① 源文件格式 助记符指令源语句的每一行通常包含4个部分: 标号区、助记符区、操作数区和注释区。 助记符指令语法格式如下:
[label][:] 标号区 mnemonic 助记符区 [operand list] [;comment] 操作数区 注释区
例 助记符指令源语句举例。
NANHUA .set 1 ;符号NANHUA=1 Begin: LD #NANHUA,AR1; 将1加载到AR1 汇编语句书写格式应遵循一定规则。这些规则如下: ① 所有语句必须以一个标号、空格、星号或分号开始; ② 标号是可选项,若使用标号,则标号必须从第一列开 始; ③ 包含有一个汇编伪指令的语句必须在一行完全指定; ④ 每个区必须用一个或多个空格分开,Tab字符与空格 等效。 ⑤ 程序中注释是可选项。在第一列用*号或;号,其它 列用;号。 ⑥ 若源程序很长,需要书写若干行,可在前一行用反斜 杠(\)结束,余下接着在下一行继续书写。
5_C54软件开发 《TMS320C54X DSP结构、原理及应用》
Assembler
汇 编 器
Assembler Source
Archiver
归 档 器
COFF Object Files
Library Build Utility
建库 工具
Library of COFF Object Files
Linker
16进制转换工具
Hex Conversion Utility Executable COFF Files
coeff
.data .word
044h,055h,066h
分析左图所示的 段汇编结果: ★ 每个段的SPC 都从地址0开始;
ivals
0cch,0ddh,0eeh
var2 inbuff mpy:
.usect .usect .text LD
"newvars",2 "newvars",8
★ 段内所有标号 (符号)地址都是相 对于地址0的。
伪指令: ◆ MEMORY,用于定义目标系统的存储器配置空间,包 括对存储器各部分的命名,以及规定它们的起始地址和长度; ◆ SECTION,告诉链接器如何将输入段组合成输出段, 以及将输出段放在存储器的什么位置。
上述伪指令构成链接命令文件(.cmd)的主要内容。
链接器默认的存储器配置
程序存储器
例:test1.asm和test2.asm如 图所示,链接命令文件见下页。 试分析其链接重定位结果。
;test1.asm .ref X .ref Z .def main .text main: B Y B Z LD #X,A Y: SET
;test2.asm .def X,Z .text X: LD #X,A Z: ADD #10,B
第5章TMS320C54x的汇编语言程序设计基础资料
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的汇编语言程序设计.
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章TMS320C54x的软件开发与设计
16
第5章 TMS320C54x的软件开发与设计
5.2 TMS320C54x汇编语言程序设计
5.2.2 汇编语言中的伪指令
5、文件引用伪指令 文件引用伪指令可以引用其它文件中的信息: .copy和.include 指明从其它文件读取源代码程序语句。 .def 指明在当前文件中定义但可被其它文件中引用的符号。 .global 指明符号为全局符号。 .ref 指明在当前文件中引用,但在其它文件中定义的符号。
20
第5章 TMS320C54x的软件开发与设计
5.2 TMS320C54x汇编语言程序设计
5.2.3 汇编语言中的常数及字符串
2、八进制整数 八进制整型常量最多由6位的八进制数字(0到7) 组 成,后缀为Q(或q)或前缀为0(零)。 [例5-7] 八进制整数示例 100011Q 32777(十进制)或8009(十六进制) 124q 84 (十进制)或54 (十六进制) 八进制常数也可使用C语言的记号,即加前缀0。 0100011 32777(十进制)或8009(十六进制) 0124 84 (十进制)或54 (十六进制)
15
第5章 TMS320C54x的软件开发与设计
5.2 TMS320C54x汇编语言程序设计
5.2.2 汇编语言中的伪指令
4、输出列表格式伪指令 输出列表格式伪指令可以指定格式化的清单列表文件输出: .length 用于控制清单列表文件页面的长度。 .page 用于控制清单列表文件中加入新页。 .tab 用于定义制表键(tab)的长度。 .title 用于控制在清单列表文件每页顶部打印标题。 .list和.nolist用于控制打开或关闭清单列表文件的输出。
8
第5章 TMS320C54x的软件开发与设计
附录 TMS320C54X汇编语言指令系统
指令系统TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。
按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。
下面分别对各类指令进行介绍。
Ⅰ、算术运算指令算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。
1.加法指令加法指令共有13条,如表1.1.1所示。
表1.1.1 加法指令整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。
例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。
小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。
2.减法指令减法指令共有13条,见表1.1.2所示。
表1.1.2 减法指令3.乘法指令乘法指令共有10条,见表1.1.3。
表1.1.3乘法指令续表4.乘加和乘减指令乘加和乘减指令共有22条,见表1.1.4所示。
表1.1.4 乘加和乘减指令续表5.双操作数指令双操作数指令共有6条,见表1.1.5所示。
表1.1.5双操作数指令续表6.特殊应用指令特殊应用指令共有15条,见表1.1.6所示。
表1.1.6 特殊应用指令续表Ⅱ、逻辑运算指令逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。
1.与指令与指令共5条,见表2.2.1。
表2.2.1与指令2.或指令或指令共5条,见表2.2.2。
表2.2.2 或指令3.异或指令异或指令共5条,见表2.2.3。
表2.2.3 异或指令4.移位指令移位指令共6条,见表2.2.4。
TMS320C54X 汇编语言
TMS320C54X 汇编语言目录第一章 寻址方式第二章 汇编语言指令系统第三章 汇编指令(伪指令)第四章 宏第五章 汇编源程序的语句格式第一章寻址方式C54X提供了七种基本寻址方式:1,立即寻址,一个固定立即值编入指令;2,绝对寻址,一个固定地址编入指令中;3,累加器寻址,用一累加器中的内容去寻址程序存储器。
4,直接寻址,相对DP或SP的偏移地址编入指令中的低七位。
偏移地址加DP或SP 决定数据存储器中的实际地址;5,间接寻址,用辅助寄存器访问存储器;6,存储器-映射寄存器寻址,修改存储器-映射寄存器不会影响到当前DP或SP的值;7,堆栈寻址,把数据压入或弹出系统堆栈。
一、立即寻址在立即寻址中,指令结构中包含操作数的特定值(立即数)。
两种类型的值可以编入指令:1,短立即数可以是3、5、8或9位长;2,16位的长立即数立即数可被编入1-字或2-字的指令中。
3、5、8或9位短立即数编入1-字指令;16位长立即数编入2-字指令中。
编入指令中的立即数的长度取决于所用指令的类型。
下表列出可编入立即数的C54指令。
表中也给出了可编入指令中的立即数位数。
3-和5-位立即数8-位立即数9-位立即数16-位立即数LD FRAMELDRPT LD ADD ORMADDM RPTAND RPTZANDM STBITF STMLD XORMAC XORMOR在立即数寻址中,要在立即数或符号前加“#”号来表示立即数。
如,把80H装入累加器A 中:LD #80h, A下图使用了RPT指令以表明短立即数如何在立即寻址方式时编入指令中。
指令中的操作码编入指令的高8位。
立即数编入指令的低8位。
例:RPT #99H15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 1 1 0 1 1 0 0 1 0 0 1 1 0 0 18位操作码8位立即数下图使用了RPT指令以表明长立即数如何在立即寻址方式时编入指令中。
15和16:DSP原理及应用——第5章TMS320C54x的汇编语言程序设计第116次课讲稿
S13.2
-8192 ≤x ≤8191.75
Q1
S14.1
《DSP原理及应用Q》0 成都理工大学工S15程.0技T术M 学院 石坚
-16384 ≤x ≤16383.5 -32768 ≤x ≤328767 8
第5章 TMS3250.7C5小4x数的运汇算编程语序言程序设计
定点DSP的小数表示法 基于2的补码形式; 数的定标有Q法和S法; C54X为16位:1位符号位,Q个小数位和15-Q个整数位。
1*32768/10,-2*32768/10
《DSP原理及应用》 成都理工大学工程技T术M 学院 石坚
12
12
start: done:
第5章 TMS.3te2x0tC54x的汇编语言程序设计 SSBX FRCT STM #a, AR1 RPT #7 MVPD table, *AR1+ STM #a, AR3 STM #x, AR4 RPTZ A, #3 MAC *AR3+, *AR4+, A STH A, y B done .end 只能最多用到AR5, 教材代码有误!!!
说明:重复操作期间,除RS外所有中断被禁止,直到重 复循环完成;CPU响应HOLD信号。
《DSP原理及应用》 成都理工大学工程技T术M 学院 石坚
2
2
第5章 单TM指S3令20重C5复4x操的作汇程编序语示言例程:序设计
【例5.5.1】对数组进行初始化,使x[8]={0,0,0,0,0,0,0,0}。
将尾数按指数值进行左
移(指数为负)或右移 指数相加 (指数为正)
暂存乘积指数
浮点运算举例
编写浮点运算程序,完 成x1*x2=0.4*(-0.9)。
附录 TMS320C54X汇编语言指令系统
指令系统TMS320C54x指令系统共有指令130条,由于操作数的寻址方式不同,派生至205条。
按指令的功能,可以将C54x指令系统分成4类:算术运算指令、逻辑运算指令、程序控制指令、加载和存储指令。
下面分别对各类指令进行介绍。
Ⅰ、算术运算指令算术运算指令分为加法指令(ADD),减法指令(SUB),乘法指令(MPY),乘加指令(MAC),乘减指令(MAS),双数/双精度指令(DADD,DSUB)和特殊操作指令(ABDST,SQDST)。
1.加法指令加法指令共有13条,如表1.1.1所示。
表1.1.1 加法指令整数分有符号数和无符号数两种格式,表示有符号数时,其最高位表示符号,最高位为0表示其为正数,1表示为负数;无符号数其最高位仍做为数值位计算。
例如,有符号数能够表示的最大的正数为07FFFh,等于32767,而0FFFFH表示最大的负数–1;无符号数不能表示负数,它能够表示的最大的数为0FFFFh,等于十进制数的65535。
小数符号和上面整数的表示一样,但必须注意如何安排小数点的位置。
2.减法指令减法指令共有13条,见表1.1.2所示。
表1.1.2 减法指令3.乘法指令乘法指令共有10条,见表1.1.3。
表1.1.3乘法指令续表4.乘加和乘减指令乘加和乘减指令共有22条,见表1.1.4所示。
表1.1.4 乘加和乘减指令续表5.双操作数指令双操作数指令共有6条,见表1.1.5所示。
表1.1.5双操作数指令续表6.特殊应用指令特殊应用指令共有15条,见表1.1.6所示。
表1.1.6 特殊应用指令续表Ⅱ、逻辑运算指令逻辑运算指令包括与指令(AND),或指令(OR),异或指令(XOR),移位指令(ROL)和测试指令(BITF)。
1.与指令与指令共5条,见表2.2.1。
表2.2.1与指令2.或指令或指令共5条,见表2.2.2。
表2.2.2 或指令3.异或指令异或指令共5条,见表2.2.3。
表2.2.3 异或指令4.移位指令移位指令共6条,见表2.2.4。
C54x第五章 程序设计
第五章程序设计本章讲C语言混合编程的一些知识。
程序的控制和转移※堆栈的使用基本运算—加法、减法、乘法数据块传送双操作数乘法长字运算除法运算浮点运算汇编与C的混合编程基本程序控制指令√条件操作循环操作比较操作基本程序控制指令主要分为:分支转移指令,子程序调用指令和子程序返回指令.分支转移指令执行周期B next4BACC src6BC next,cnd5/3(满足5,否则3)子程序调用指令执行周期CALL sub4CALA src6CC sub,cnd5/3(满足5、否则3)执行周期RET5RETE6RC cnd5/3(满足5,否则3)分分支转移指令只是通过改变PC来改变程序运行流向,无堆栈操作.子程序调用指令是首先将返回地址压入堆栈,再执行子程序,在子程序的最后执行返回指令,将返回地址出栈并加载pc,同时复原堆栈指针。
程序控制与转移基本程序控制指令条件操作√循环操作比较操作条条件分支指令或条件调用指令、条件返回指令都属于条件操作。
条件算符分为两组,每组又分为几类。
第二组A类B类A类B类C类EQ OV TC C BIO NEQ NOV NTC NC NBIO LTLEQGTGEQ第一组:组内可以对同一累加器的两类条件可以进行“与”逻辑运算。
第二组:可以对三类条件同一性质的条件进行组合,如都是位有效,或都是位无效。
只有BIO是反逻辑,其它都是1有效,0无效。
条件分支种类很多,例如:RC TC;条件返回,表示若TC=1,则子程序返回,否则继续执行。
CC sub,BNEQ ;条件调用,表示若累加器B不等于0,则调用sub子程序。
BC new,AGT,AOV ;与关系的条件分支操作,如果A›0且A溢出,则跳转到new行语句,否则顺序执行。
BC new,AGTBC new,AOV ;或关系的逻辑分支操作。
基本程序控制指令条件操作循环操作√比较操作--BANZ√由BANZ 构成的循环单指令重复块重复操作循环的嵌套--BANZBANZ指令格式:BANZ[D] pmad, Sind ;表示辅助寄存器Sind不为0就跳转到pmad行语句,否则顺序执行下面语句。
DSP原理及应用--TMS320C54x软件开发
①PAGE 指定存储器空间页面,最多255个。通常PAGE 0用于
程序存储器,PAGE 1用于数据存储器, PAGE 2用于I/O存 储器,默认为PAGE 0。 ②name是存储器区间的取名,可由1~64个字符组成,包括A-Z、 a-z、$、.、_ ③attr指定存储区的1-4种属性
R 指定该存储区可以读
SECTIONS
{
.text
.data .bss
: {}> PRAM
: {}> PRAM : {}> DRAM
PAGE 0
PAGE 0 PAGE 1 PAGE 1
.mystack : {}> DRAM
}
18
四、程序装入
1、硬件仿真器和 CCS集成开发环境,具有内部的装入器,调 用装入器的LOAD命令即可装入可执行程序。
器中。
.space n — 以位为单位,空出n位存储空间。
.end — 程序块结束。
26
四、宏定义和宏调用
TMS320C54x汇编支持宏语言。如果程序中需要多次执 行某段程序,可以把这段程序定义(宏定义)为一个宏,然
后在需要重复执行这段程序的地方调用这条宏。
宏定义如下: Macname .macro[parameter 1][,…,parameter n] …… [.mexit] .endm 宏调用如下: Macname [parameter 1][,…,parameter n]
27
例如:完成P3=p1+p2 Add2 .macro p1,p2,p3
LD
ADD
p1,A
p2,A
STL
.endm
A, p3
.global shu1,shu2,he
第5章 TMS320C54x高级C语言程序设计
C54x的程序设计有两种语言:汇编 语言和C语言。 汇编语言程序的特点: 效率高; 硬件定时准确; 不够直观; 设计周期较长; 可移植性和可维护性差 。
第5章 C54x高级C语言程序设计
C语言程序的特点:
可移植性好; 可维护性好;
可生成代码执行效率较高的
价于算术右移
第5章 C54x高级C语言程序设计
3)DSP C语言关于变量的特殊规定
③ 除法和取余
DSP的C语言做了如下规定: 10/-3==-3 ; 10%-3==1 ; -10/3==-3 ; -10%3==-1 即:余数的符号与被除数的符号保持一致。
第5章 C54x高级C语言程序设计
3)DSP C语言关于变量的特殊规定
未初始化段 .bss
.stack .system
全局和静态变量
软件堆栈 动态存储空间
代码段 void main( ) { sum=a+b; } 已初始化数据段 int a=10; int b=20;
段是代码或数据块 的组合,它最终将 在存储器中占据一 个连续的空间 目标文件的每一个 段都是各自独立的
第5章 C54x高级C语言程序设计
5.1 C54x C语言介绍
5.1.1 C54x C与ANSI C的相同点
只要与硬件不是特别相关的部分
都是它们的相同点。
第5章 C54x高级C语言程序设计
5.1.1 C54x C与ANSI C的相同点
① 以函数作为基本单位。 ② 函数的定义和引用方式完全一致。
第5章 C54x高级C语言程序设计
5.2 C54x C语言编程
5.2.1 C54x C语言开发的存储器结构 1. C54x C语言开发的段结构
第5章 C54x的汇编语言程序设计
1
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
9
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
4. 局部标号
【例5.1.4】合法、非法局部标号$n举例。 5.1.4】合法、非法局部标号$ 举例。 假设符号ADDRA ADDRB,ADDRC已经在前面作了定义。 假设符号ADDRA,ADDRB,ADDRC已经在前面作了定义。 ADDRA, 已经在前面作了定义 Label1: 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 STL $1,ALT A,ADDRC STL A,ADDRC $1 NOP $1 NOP
11
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
2. 堆栈区大小的确定 堆栈区的大小可以按照以下步骤来确定: 堆栈区的大小可以按照以下步骤来确定:
① 先开辟一个较大的堆栈区,用已知数充填,如: 先开辟一个较大的堆栈区,用已知数充填, LD STM MVMM loop: loop: STL BANZ # -9224,B 9224, length, # length,AR1 SP, SP,AR4 B,*AR4B,*AR4loop,*AR1loop,*AR1数据RAM 数据 ;堆栈区要充填的数0DBF8h加载B 堆栈区要充填的数0DBF8h加载 加载B
第5章 'C54x的汇编语言程序设计
第5章 TMS320C54x汇编语言程序设计
2.标号 在使用标号时,标号的值是段程序计数器SPC的 当前值。 例如,若使用.word伪指令初始化几个字,则标 号将指到第一个字。
【例5.1.2】 标号格式举例。 … … ;假设汇编了某个其他代码 9 000000 10 000040 000A Start: .word 0Ah,3,7 000041 0003 标号,值为40h 000042 0007
2016年11月14日 DSP原理及应用 23
第5章 TMS320C54x汇编语言程序设计
5.1.2 汇编语言中的常数与字符串
6. 汇编时间常数 在程序中使用.set伪指令给一个符号赋值,该符 号就成为一个汇编时间常数,等效于一个常数。
为了使用表达式中的常数,赋给符号的必须是绝 对值。 例如:将常数值18赋给符号bei_hua。 bei_hua .set
第5章 TMS320C54x汇编语言程序设计
5.1 概述
5.1.1 汇编语言源程序格式
汇编语言程序以.asm为扩展名,可以用任意的编
辑器编写源文件。一条语句占源程序的一行,长度可
以是源文件编辑器格式允许的长度,但汇编器每行最 多读200个字符。因此,语句的执行部分必须限制在 200个字符以内。
2016年11月14日
注释是任选项。 例如:
11 00000 .bss sym, ; 保留空间于.bss ************************************** * 改变段,允许第五个‘mylab’定义 * **************************************
DSP原理及应用 17
第5章 TMS320C54x软件开发
返回本节
5.2 公共目标文件格式
5.2.1 COFF文件的基本单元——段
5.2.2 汇编器对段的处理 5.2.3 链接器对段的处理 5.2.4 重新定位 5.2.5 程序装入
5.2.6 COFF文件中的符号
返回首页
5.2.1 COFF文件的基本单元——段
段(sections)是COFF文件中最重要的概念。 一个段就是最终在存储器映象中占据连续空间的 一个数据或代码块。目标文件中的每一个段都是 相互独立的。一般地,COFF目标文件包含3个缺 省的段:text段、data段、bss段。
图5-4 链接器默认的存储器分配
返回本节
5.2.4 重新定位
1.链接时重新定位
将各个段定位到存储器中,每个段都从合适的地 址开始。
将符号值调整到相对于新的段地址的数值。
调整对重新定位后符号的引用。
2.运行时重新定位
将代码装入存储器的一个地方,而运行在另一个 地方。利用SECTIONS命令选项让链接器定位两 次。一些关键的执行代码必须装入在系统的ROM 中,但希望在较快的RAM中运行。 链接器提供了一个简单的处理该问题的方法。利 用SECTIONS命令选项让链接器定位两次。第一 次使用装入关键字设置装入地址,再用运行关键 字设置运行地址。
.endm 返回本节
5.4 链接器命令文件的编写与使用
5.4.1 MEMORY伪指令及其使用 5.4.2 SECTIONS伪指令及其使用
返回首页
5.4.1 MEMORY伪指令及其使用
MEMORY 伪 指 令 就 是 用 来 指 定 目 标 存 储 器 的 模 型 。 MEMORY伪指令的一般语法为:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;子程序执行
STM RPTZ MAC STL RET .end
#x, AR4 A, #3 *AR3+,*AR4+,A A,@ y
链接: 其他: MEMORY 、SECTIONS .align、 .copy、.def 、.ref 、.mmregs
第5章 TMS320C54x汇编语言程序设计
5.4 算术运算程序 5.4.1 加、减法和乘法运算
在数字信号处理中,加法和乘法运算是最常见 的算术运算。
【例5.4.1】 计算y = a x + b 程序:
; 变量初始化
; 插入0个等待状态 ; 设置堆栈指针 ; AR1指向a ; 移动8个数据 ; 从程序存储器到数据存储器 ; 调用SUM子程序
第5章 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
【例5.4.3】计算 y = a x
i 1 4 i i
程序: SUM:Sຫໍສະໝຸດ M#a, AR3LD
MPY ADD STL
@a, T
@x, B @b, B B, @y
;取a值,T=a ;完成ax乘积,B=ax ;完成ax+b运算,B=ax+b ;计算结果存入y中
第5章 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
【例5.4.2】 计算y = xl al + x2 a2
5.4.1 加、减法和乘法运算
【例5.4.3】计算 y = a x
i 1 4 i i
程序: STM STM RPTZ MAC STL RET .end #a, AR3 #x, AR4 A, #3 *AR3+,*AR4+,A A,@ y
第5章 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
程序:
LD MPY LD MAC STL STH
@x1, T @a1, B @x2, T @a2, B B, @y B, @y+1
;T=x1 ;B=x1a1 ;T=x2 ;乘法累加,B=x1a1+x2a2 ;计算结果的低字BL存入y中 ;计算结果的高字BH存入y+1中
第5章 TMS320C54x汇编语言程序设计
第5章 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
【例5.4.3】计算 y = a x
i 1 4 i i
程序: table:
start:
end:
.word 1,2,3,4 .word 8,6,4,2 .text STM #0,SWWSR STM #STACK+10h,SP STM #a,AR1 RPT #7 MVPD table,*AR1+ CALL SUM B end
内容回顾
.asm 源文件 .obj 目标文件
. cmd 链接命 令文件
.out 输出文件
文本编辑器
汇编器
-l
链接器
-m
-o
调试程序
伪指令
. lst 列表文件
. map 存储器 映像文件
十六进制 转换程序 HEX500
段定义: .bss、.data、.sect、.text、.usect
初始化: .byte、 .word、.set
【例5.4.3】计算 y = a x
i 1 4 i i
程序: ******************************************** * example.asm * ******************************************** .title “example.asm” .mmregs stack .usect “STACK”,10h ;为堆栈指定空间 ;为变量分配9个字的空间 .bss a,4 .bss x,4 .bss y,1 .def start .data