第5章TMS320C54x的汇编语言程序设计报告
第5章TMS320C54x的汇编语言程序设计
![第5章TMS320C54x的汇编语言程序设计](https://img.taocdn.com/s3/m/b0da95f80975f46527d3e161.png)
也可以用.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汇编语言程序设计](https://img.taocdn.com/s3/m/0713477401f69e314332941f.png)
第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的软件开发与设计](https://img.taocdn.com/s3/m/fe28593ebcd126fff7050bc6.png)
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滤波器](https://img.taocdn.com/s3/m/250d32c85fbfc77da269b1f6.png)
已知一低通滤波器的采样率为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结构、原理及应用》](https://img.taocdn.com/s3/m/126bed27ee06eff9aef807b8.png)
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的汇编语言程序设计基础资料](https://img.taocdn.com/s3/m/a7564bda25c52cc58bd6beda.png)
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的汇编语言程序设计.](https://img.taocdn.com/s3/m/d5512d4fc1c708a1284a44ca.png)
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汇编指令系统](https://img.taocdn.com/s3/m/71d29720b6360b4c2e3f5727a5e9856a56122637.png)
表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的软件开发与设计](https://img.taocdn.com/s3/m/87825b34aaea998fcc220e71.png)
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 汇编语言](https://img.taocdn.com/s3/m/a95904f5ba0d4a7302763abd.png)
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的汇编语言程序设计](https://img.taocdn.com/s3/m/00862a2ba55177232f60ddccda38376baf1fe0be.png)
二、汇编语言中的常数和字符串
常数、字符串和符号是汇编器能识别的数据项 ,是汇编指 令、伪指令和宏指令语句中操作数的基本组成部分。
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次课)(讲稿)](https://img.taocdn.com/s3/m/1b346b5f312b3169a451a4e6.png)
对数组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软件开发](https://img.taocdn.com/s3/m/01ca11afc77da26925c5b01b.png)
链接器有两个命令完成上述功能,即:
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语言程序设计](https://img.taocdn.com/s3/m/b9913113227916888486d756.png)
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的汇编语言程序设计](https://img.taocdn.com/s3/m/ed456209bb68a98271fefab8.png)
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)的当前值。