第5章TMS320C54x的汇编语言程序设计报告

合集下载

第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

第5章 TMS320C54x汇编语言程序设计

第5章 TMS320C54x汇编语言程序设计

第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
4
【例5.4.3】计算 y = ∑ a x 5.4.3】
i =1
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
; 变量初始化
; 插入0个等待状态 插入0 ; 设置堆栈指针 ; AR1指向a AR1指向 指向a ; 移动8个数据 移动8 ; 从程序存储器到数据存储器 ; 调用SUM子程序 调用SUM SUM子程序
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计
5.4.1 加、减法和乘法运算
4
【例5.4.3】计算 y = ∑ a x 5.4.3】
i =1
i i
程序: 程序: ******************************************** * example.asm * ******************************************** “example.asm” example.asm” .title .mmregs “STACK”,10h ;为堆栈指定空间 STACK” stack .usect 为变量分配9 ;为变量分配9个字的空间 .bss a,4 .bss x,4 .bss y,1 .def start .data

第5章TMS320C54X的软件开发与设计

第5章TMS320C54X的软件开发与设计

ADD p2, A
ADD p1, A STL A, ADDRP .endm
13
5. 堆栈的用法
堆栈被用于保存中断程序、调用子程序的返回地址,也用 于保护和恢复用户指定的寄存器和数据,还用于程序调用时的 参数传递。返回地址是由DSP自动保存的。
C5000等DSP支持软件堆栈,需要在用户指定的存储区开 辟一块存储区作为堆栈存储器,指针SP指向这一区域。 举例:以C54X为例,说明如何使用堆栈。 在初始化程序中,应出现以下指令: size .set 64
6
•汇编伪指令任务:给程序提供数据并且控制汇编过程。
• • • • • • • • 将代码与数据汇编到特定的段; 为未初始化的变量保留存储空间; 存储器初始化; 汇编条件块; 定义全局变量; 指定汇编器可以获得的宏库; 控制展开列表的形式; 检查符号调试信息。
7
表4-2 常用的汇编伪指令
8
1.段定义伪指令
为便于链接器将程序、数据分段定位于指定的(物理存在的) 存储器空间,并将不同obj文件链接起来,TI公司的DSP软件设计 使用了程序、数据、变量分段定义的方法。
•段的使用有以下的约定:
.text : 此段存放程序代码.
.data : 此段存放初始化了的数据.
.sect ‘名称’ : 定义一个有名段,放初始化了的数据或程序代 码. .bss : 此段存入未初始化的变量. 符号名.usect “段名”,字个数 : 为一个有名称的段保留一段存 储空间,但不初始化。 段在段程序计数器管理下工作 SPC : section progrom counter
stack .usect “STK”, size STM #stack+size, SP 应注意SP是向下增长的,即初始化后,SP指向堆栈存储区的 最后一个地址。 14

TMS320C54x汇编语言编程实现FIR滤波器

TMS320C54x汇编语言编程实现FIR滤波器

已知一低通滤波器的采样率为8KHz,通带为1500Hz,阻带为2000 Hz,带内波动3dB,带外衰减-50dB,滤波器的相位具有线性特性。

具体幅频特性见下图。

要求用等波纹方法设计出该FIR滤波器,然后用TMS320C54x汇编语言编程实现该FIR滤波器。

使用MATLAB设计语言设计滤波器:[n,fo,mo,w] = remezord( [500 600], [1 0], [0.01 0.1], 2000 );b = remez(n,fo,mo,w);其中,b为FIR滤波器系数,本题系数的具体设计结果为:-0.0119(FE7AH) 0.0406(0532H) -0.0178(FDB9H) -0.0315(FBF8H) 0.0087(011DH) 0.0498(0660H) 0.0066(00D8H) -0.0826(F56DH) -0.0488(F9C1H) 0.1779(16C5H) 0.4142(3504H) 0.4142(3504H) 0.1779(16C5H) -0.0488(F9C1H) -0.0826(F56DH) 0.0066(00D8H) 0.0498(0660H) 0.0087(011DH) -0.0315(FBF8H) -0.0178(FDB9H) 0.0406(0532H) -0.0119(FE7AH)频响如图1所示图1 滤波器频响图DSP设计代码:.title "FIR.asm".mmregs.global _c_int00PA0 .set 0PA1 .set 1size .set 22.bss count,2.bss x,22.bss y,64.dataCOEF: .word 0FE7Ah ; H0----H21 .word 0532h.word 0FDB9h.word 0FBF8h.word 011Dh.word 0660h.word 00D8h.word 0F56Dh.word 0F9C1h.word 16C5h.word 3504h.word 3504h.word 16C5h.word 0F9C1h.word 0F56Dh.word 00D8h.word 0660h.word 011Dh.word 0FBF8h.word 0FDB9h.word 0532h.word 0FE7Ah.text_c_int00: SSBX FRCTST #0, *(count)STM #x+22,AR1STM #y,AR2STM #21 ,AR0LD #x+1 ,DPPORTR PA1,@x+1fir: RPTZ A,#21MACD *AR1-,COEF,ASTH A,*AR1PORTW *AR1+,PA0STH A,*AR2+ADDM #1,*(count)CMPM *(count),1024BC done, TCBD firPORTR PA1,*AR1+0done: B done.end通过CCS观察滤波器频响如图2所示,图2 滤波器频响输入信号为正弦波,频率为1000Hz,输入文件sin_1000.dat,输出文件out_1000.dat,波形如图3所示图3 输入信号频率为1000Hz时的输出结果输入信号为正弦波,频率为2500Hz,输入文件sin_2500.dat,输出文件out_2500.dat,波形如图4所示图4 输入信号频率为2500Hz时的输出结果Matlab分析代码见Lowpass_FIR\annaly\FIR_annaly.m文件,分析结果如图所示:图5 输入信号频率为1000Hz 时的分析结果图6 输入信号频率为2500Hz 时的分析结果0.0020.0040.0060.0080.010.0120.014-4-22441000Hz 输入信号-4-22441000Hz 输出信号42500Hz 输入信号00.0020.0040.0060.0080.010.0120.01442500Hz 输出信号。

5_C54软件开发 《TMS320C54X DSP结构、原理及应用》

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的汇编语言程序设计基础资料

第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. 名字项 名字项可以是标号或变量,用来表示本语句的符号地址,只有

TMS320C54x汇编指令系统

TMS320C54x汇编指令系统

表4-2 加法指令
表4-3 减法指令
表4-4 乘法指令
表4-5 乘加和乘减指令
表4-6 双精度(32位操作数)指令
表4-7 专用指令 返回本节
2.2 逻辑运算指令
● 逻辑指令包括与、或、异或(按位)、移位和测试指令,分别如表4-8、表4-9、表4-10、表4-11、 表4-12所示。
表4-13 分支转移指令
表4-14 子程序调用指令表4-15 中断指令表4-16 返回指令
表4-17 重复指令
表4-18 堆栈操作指令
表4-19 混合程序控制指令 返回本节
表4-8 与逻辑运算指令
表4-9 或逻辑运算指令
表4-10 异或逻辑运算指令
表4-11 移位逻辑运算指令
表4-12 测试指令 返回本节
2.3 程序控制指令
● 程序控制指令包括分支转移指令、子程序调用指令、中断指令、返回指令、重复指令、堆栈操作 指令及混合程序控制指令,分别如表4-13、表4-14、表4-15、表4-16、表4-17、表4-18及表419所示。
TMS320C54x汇编指令系统
1 指令系统中的符号和缩写
表4-1 指令系统中的符号和缩写
返回首页
返回本节
2 指令系统
● 2.1 算术运算指令 ● 2.2 逻辑运算指令 ● 2.3 程序控制指令
返回首页
2.1 算术运算指令
● C54x的算术运算指令包括加法指令、减法指令、乘法指令、乘累加指令与乘法减法指令、双字/ 双精度运算指令及专用指令。分别如表4-2、表4-3、表4-4、表4-5、表4-6、表4-7所示。

第5章TMS320C54x的软件开发与设计

第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 汇编语言

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指令以表明长立即数如何在立即寻址方式时编入指令中。

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

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

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

15和16:DSP原理及应用——第5章TMS320C54x的汇编语言程序设计(第15、16次课)(讲稿)

15和16:DSP原理及应用——第5章TMS320C54x的汇编语言程序设计(第15、16次课)(讲稿)
【例5.5.1】对数组进行初始化,使x[8]={0,0,0,0,0,0,0,0}。 5.5.1】对数组进行初始化, x[8]={0,0,0,0,0,0,0,0}。 .bss STM LD RPT STL 注意: 注意: x, 8 #x, AR1 #0, A #7 A,*AR1+ RPTZ STL A, #7 A, *AR1+ .bss STM x, 8 #x, AR1
对数组X ]=中的每个元素加 中的每个元素加1 【例5.5.2】对数组X[8]=中的每个元素加1。
循环嵌套! 循环嵌套!P159
原理及应用》 《DSP原理及应用》 成都理工大学工程技术学院 石坚 原理及应用
TM
4
4
块指令重复操作程序示例: 第5章 块指令重复操作程序示例: TMS320C54x的汇编语言程序设计 TMS320C54x的汇编语言程序设计 【例5.5.2】对数组x[8]中的每一元素加1。 5.5.2】对数组x[8]中的每一元素加 中的每一元素加1
5.5 重复操作程序 第5章 TMS320C54x的汇编语言程序设计 TMS320C54x的汇编语言程序设计
重复执行一条指令或一段指令(指令块) 重复执行一条指令或一段指令(指令块),因此可以分为单 指令重复和块重复。 指令重复和块重复。 对应指令: 对应指令:RPT、RPTZ、RPTB。 、 、 。
8
8
原理及应用》 《DSP原理及应用》 成都理工大学工程技术学院 石坚 原理及应用 Q0 S15.0 -32768 ≤x ≤32767
5.7 小数运算程序 第5章 TMS320C54x的汇编语言程序设计 TMS320C54x的汇编语言程序设计
定点DSP的小数表示法 定点DSP的小数表示法 DSP 基于2的补码形式; 数的定标有Q法和S法; C54X为16位:1位符号位,Q个小数位和15-Q个整数位。 十进制小数的2 十进制小数的2的补码表示 正数:乘以32768; 负数:绝对值乘32768,再取反加1。

第5章 TMS320C54x软件开发

第5章  TMS320C54x软件开发


链接器有两个命令完成上述功能,即:
MEMORY 命令 —— 定义目标系统的存储器配置 图,包括对存储器各部分的命名,以及规定它们 的起始地址和长度。 SECTIONS命令——告诉链接器如何将输入段组 合成输出段,以及在存储器何处存放输出段。子 段可以用来更精确地编排段,可用链接器 SECTIONS命令指定子段。
返回本节
5.5.3 汇编源程序中的符号
1.标号 2.局部标号
3.符号常数
4.先定义的符号常数
5.替代符号
表5-4 可以用在表达式中的运算符
表5-5 带有绝对符号、可重定位符号的表达式
返回本节
5.5.4 汇编源程序中的表达式

表达式可以是常数、符号或由算术运算符结合的 常数和符号。表达式值的有效范围为32768~32767。




.mmregs — 定义存储器映射寄存器的符号名,这样就可 以用AR0、PMST等助记符替换实际的存储器地址。 .float 数1,数2 — 指定的各浮点数连续放置到存储器中 (从当前段指针开始)。 .word 数1,数2 — 指定的各数(十六进制)连续放置到 存储器中。 .space n — 以位为单位,空出n位存储空间。 .end — 程序块结束。

返回本节
5.4.2 SECTIONS伪指令及其使用

SECTIONS伪指令功能如下:
说明如何将输入段组合成输出段。 在可执行程序中定义输出段。 指定输出段在存储器中存放的位置。 允许对输出段重新命名。
图5-5 例5-6中段的定位 返回本节
5.5 汇编语言程序编写方法

5.5.1 汇编语言源程序格式 5.5.2 汇编语言中的常数和字符串

第5章 TMS320C54x高级C语言程序设计

第5章 TMS320C54x高级C语言程序设计
第5章 C54x高级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的汇编语言程序设计

第5章 C54x的汇编语言程序设计
第5章 TMS320C54x汇编语言程序设计 TMS320C54x汇编语言程序设计 5.1 概述 5.2 堆栈的使用方法 5.3 控制程序 5.4 算术运算程序 5.5 重复操作程序 5.6 数据块传送程序 5.7 小数运算程序 5.8 浮点运算程序
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
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MS320C54x汇编语言源程序由源语句组 成。这些语句可以包含汇编语言指令、汇 编伪指令和注释。程序的编写必须符合一 定的格式,以便汇编器将源文件转换成机 器语言的目标文件。下面将介绍汇编语言 源程序的格式、各种常数、符号、字符串 和表达式的规定。
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.1.2 标号格式举例。 标号Start的值为40h: … … 9 000000 ;假设汇编了某个其他代码 10 000040 000A Start: .word 0Ah ,3 ,7 000041 0003 000042 0007
在一行中的标号本身是一个有效的语句。 标号将段程序计数器(SPC)的当前值赋 给标号,等效于下列伪指令语句: label .set $ ; $提供SPC当前值 如果标号单独占一行时,它将指到下一 行的指令(SPC不增加): 3 000043 Here: 4 000043 0003 .word 3
⑷ 十六进制整数 十六进制整数常量最多由4位十六进制数字组成, 带后缀H(或h)。例如: 0DH 14(十进制) 12BCH 4796(十进制) 对十六进制常数也可使用C语言的记号,即加前缀 0x: 0x0D 14(十进制) 0x12BC 4796(十进制)
⑸ 浮点数 浮点整型常量由一串十进制数字组成,可以 带小数点、分数和指数部分。浮点数的表示方法 为 [±][n]. [n][E|e] [±][n] n代表一串十进制数,小数点必须指定。例如 99.e9是有效数,但99e9非法。 ⑹ 汇编时间常数 在程序中使用.set伪指令给一个符号赋值,该 符号就成为一个汇编时间常数,等效于一个常数。 赋给符号的必须是绝对值。例如将常数值18赋给 符号nan_hua,即 nan_hua .set 18 LD # nan_hua,A
④ 注释区 注释是任选项。 注释可以由ASCⅡ码和空格组成。
5.1.2 汇编语言中的常数与字符串
汇编器支持以下几种类型的常数(常量)。 ① 二进制整数 二进制整数常量最多由16位二进制数字(0 或1)组成,后缀为B(或b)。如果数字小于16 位,汇编器将其右边对其,并在前面补零。例如: 10001000B 136(十进制) 0111100b 60(十进制) 10b 2 (十进制) 10001111B 143(十进制)
第5章
TMS320C54x的汇编语言程序设计
知识要点:本章涉及的内容包括汇编语言 源程序的格式、常数、字符串、符号和表 达式的规定;堆栈的使用方法;分支、调 用、返回等控制程序;加法、乘法、除法、 长字和并行等算术运算程序;单指令、块 重复、循环嵌套等重复操作程序;数据块 传送程序;小数运算程序以及浮点运算程 序等。
也可以用.set伪指令将符号常数赋给寄 存器名。此时,该符号变成了寄存器替代 名。例如: AuxR1 .set AR1 MVMM AuxR1,SP ⑺ 字符常数 字符常数是包括单引号内的字符串。若 单引号之间没有字符,则值为0。每个字符 在内部表示为8位ASCⅡ码。例如: ‘a’ 内部表示为61h ‘B’ 内部表示为42h
⑵ 八进制整数 八进制整数型常量最多由6位八进制数字 (0~7)组成,后缀为Q(或q)或前缀为0 例如: 100011Q 32777(十进制) 124q 84(十进制) 对八进制常数也可使用C语言的记号,即 加前缀0。 0100011 32777(十进制) 0124 84(十进制)
⑶ 十进制整数 十进制整数型常量由十进制数字串组成, 无后缀。取值范围为:-32768~32767或 0~65535。例如: 2118 2118(十进制) 65535 65535(十进制) -32768 -32768(十进制)
③ 助记符指令区 在助记符汇编语言中,紧接在标号区后面的 是助记符区和操作数区。 ⑴ 助记符区 助记符区跟在标号区的后面。 助记符指令可以是汇编语言指令、汇编伪指令、 宏伪指令。助记符区不能从第一列开始。 助记符区可以包含如下操作码。 ① 机器指令助记符,一般用大写; ② 汇编伪指令、宏伪指令。以英文句号“.”开头, 且为小写; ③ 宏调用。
② 标号区 所有汇编指令和大多数汇编伪指令前面 都可以选择语句标号。使用语句标号时, 必须从源语句第一列开始。 标号最多为32个字符,由(A~Z, a~z, 0~9, _和$)等组成。标号分大小写,第一个字 符不能用数字。标号后面带冒号: 在使用标号时,标号的值是段程序计数 器(SPC)的当前值。
相关文档
最新文档