第4章__TMS320C54x汇编语言程序设计

合集下载

第4章 'C54x的汇编语言程序设计

第4章 'C54x的汇编语言程序设计

第4章 TMS320C54x汇编语言程序设计
2.标号 在使用标号时,标号的值是段程序计数器SPC的 当前值。 例如,若使用.word伪指令初始化几个字,则标 号将指到第一个字。
【例4.1.2】 标号格式举例。 … … ;假设汇编了某个其他代码 9 000000 10 000040 000A Start: .word 0Ah,3,7 000041 0003 标号,值为40h 000042 0007
第4章 TMS320C54x汇编语言程序设计
(1) 指令的操作数前缀 ② 用“*”作前缀
使用“*”符号作为前缀,汇编器将操作数作为 间接地址,即把操作数的内容作为地址。 例如: Label: LD * AR3, B 操作数*AR3指定一个间接地址。该指令将引导 汇编器找到寄存器AR3的内容作为地址,然后将该地 址中的内容装入指定的累加器B中。
Begin: 标 号
LD #NANHUA,AR1 ; 将1加载到AR1 助记符 操作数 注 释
第4章 TMS320C54x汇编语言程序设计
1. 源文件格式
语句的书写规则:
① 所有语句必须以标号、空格、星号或分号 (*或;)开始; ② 标号是可选项,若使用标号,则标号必须 从第一列开始; ③ 所有包含有汇编伪指令的语句必须在一行 完成指定; ④ 各部分之间必须用空格分开,Tab字符与空 格等效;
第4章 TMS320C54x汇编语言程序设计
(1) 指令的操作数前缀 ③ 用“@”作前缀
使用“@”符号作为前缀,汇编器将操作数作为 直接地址,即操作数由直接地址码赋值。 例如: Label: LD @ x, A
只要DP=0,将直接地址x中的内容装入指定的累 加器A中。
第4章 TMS320C54x汇编语言程序设计

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

第4章TMS320C54x汇编语言程序设计
第4章 TMS320C54x汇编语言程序设计
第4章 TMS320C54x汇编语言程序设计
4.1 TMS320C54x汇编语言的基本概念 4.2 TMS320C54x汇编语言程序设计的基本方法 4.3 TMS320C54x汇编语言程序的编辑、汇编与链接过程 4.4 汇编器 4.5 链接器 4.6 Simulator的使用方法 4.7 汇编程序举例
.bss 符号,字数 符号 .usect “段名”,字数
第4章 TMS320C54x汇编语言程序设计
2) 已初始化段 .text、.data和 .sect命令建立已初始化段。已初始化 段包括可执行代码或已初始化的数据。在目标文件中, 这些段中都有确切内容,当加载程序时再将这些内容 放到TMS320C54x的存储器中。每个初始化段都可以重 新定位,也可以引用在其他段中定义的符号,链接器 会自动处理段间的相互引用。这三条命令的句法如下: .text [段起点] .data [段起点] .sect "段名”[,段起点]
初始化一个或多个32位的数据,为IEEE浮点数
初始化一个或多个32位的数据,为IEEE单精度的 浮点格式
.string “string1” [,…,“string n” ]
. pstring “string1” [,…,“string n” ]
. long value1[,…,valuen]
初始化一个或多个字符 初始化一个或多个字符 设置32位无符号整型量
3.操作数 操作数是指指令中的操作数或伪指令中定义的内 容。操作数之间必须用逗号(,)分开。有的指令无操作 数,如指令NOP。指令中的操作数可以是寄存器、地 址、常数、算术或逻辑表达式。 4.注释 注释从分号(;)开始,可以放在指令或伪指令的后 面,也可以单独占一行或数行。注释是任选项。如果 注释从第1列开始,也可以用星号(*)。

第4章 TMS320C54x应用程序开发过程[DSP技术与应用实例(第3版)]课件

第4章  TMS320C54x应用程序开发过程[DSP技术与应用实例(第3版)]课件

常用的汇编命令:
汇编命令
作用
举例
.title
紧跟其后的是用双引号括起的源程序名
.title "example.asm"
.end
结束汇编命令,汇编程序将忽略此后的任何源 语句,所以它应是程序的最后语句
放在汇编语言源程序的最后
.text
紧跟其后的是汇编语言程序正文
.text段是源程序正文。经汇编后,紧随.text后的是可执 行程序代码
计算顺序
从右到左 从左到右 从左到右 从左到右 从左到右 从左到右 从左到右 从左到右 从左到右
2.表达式上溢和下溢
在汇编时,执行算术操作后,汇编器检查上溢和下溢的条件。 一旦上溢和下溢出现,它就发出截断了的警告。汇编器不检查乘法的 上溢和下溢。
3.合格的表达
某些汇编器要求合格的表达式作为操作数。合格的表达式是指表 达式中的符号或汇编时间常数在遇到它们之前都是已经定义了的, 合格的表达式的计算必须是绝对的。
链接器将输入段组合成一个可执行的目标模块
程序存储器
file1 .text file2 .text file1 .data file2 .data file table_1 file table_2
file2 FFT
没有使用
(mnemonic to algebraic translator utility) (6)建库工具(library-build utility) (7)十六进制转换工具(hex conversion utility )
(8)绝对地址列表器(absolute lister) (9)交叉引用列表器(cross-reference lister)
.def
在此模块中定义,可为别的模块引用

第4章--TMS320C54x软件开发1

第4章--TMS320C54x软件开发1
Macname .macro[parameter 1][,…,parameter n]
…… [.mexit] .endm
返回本节
宏定义例子: Add3 .macro P1,P2,P3,ADDRP LD *(P1),A ADD *(P2), A ADD *(P3), A STL A,*(ADDRP) 宏调用例子 :
9
BC aloop, AGEQ
10
.data
11 ivals .word 0cch,0ddh,0eeh
12 var2 .usect “newvars”, 2
13 inbuf .usect “newvars”, 8
14
.text
15 mpy: LD 0Ah, B
16 mloop: MPY #0A, B
链接器对段旳处理有两个功能。首先,它将汇编 器产生旳COFF目旳文件(.obj文件)中旳多种段 作为输入段,当有多种文件进行链接时,它将输 入段组合起来,在可执行旳COFF输出模块中建 立各个输出段。其次,链接器为输出段选择存储 器地址。
图4-4 链接器默认旳存储器分配 返回本节
4.3 常用汇编伪指令
段命令应用举例
.text 100d f010 0001 f842 0001 110a f166 000a f868 0006
.data 0044 0055 0088 0456 00cc 00dd 00ee
.vectors 0044 0088
.bss 保存8个字
.newvars 保存10个字
解释:本例共5个段 .text:具有7个字旳代码 .data:7个字旳数据 .vectors:已初始化命名段
MEMORY: 对存储器进行分配 SECTIONS :对各段在存储器旳位置进行分配

第4章 TMS320C54xDSP寻址方式

第4章 TMS320C54xDSP寻址方式

第4章 TMS320C54xTM DSP汇编语言与混合编程 (2) MVDK 语 法:助记符方式 MVDK Smem,dmad 执行过程:(dmad)→EAR if (RC)≠0 Then (Smem)→通过EAR寻址的Dmem (EAR)+1→EAR Else (Smem)→通过EAR寻址的Dmem 该指令不会影响任何状态位。
第4章 TMS320C54xTM DSP汇编语言与混合编程
功能描述:把一个单数据存储器操作数Smem的内容复制 到一个通过dmad(地址在EAB地址寄存器EAR中)寻址的数 据存储器单元。可以循环执行该指令来转移数据存储器中 的连续字。
第4章 TMS320C54xTM DSP汇编语言与混合编程 例4.32 MVDK DAT10,8000H
一条指令中可对两种立即数编码, 一种是短立即数(3、5、8或9位),短立即数指令编码 为一个字长。 另一种是16位的长立即数,16位立即数的指令编码为两 个字长。
第4章 TMS320C54xTM DSP汇编语言与混合编程
支持立即数的指令
3位或5位立即数 8位立即数 9位立即数 16位立即数 ADD ADDM AND ANDM BITF CMPM LD MAC OR ORM RPT RPTZ ST STM SUB XOT XORM lK
第4章 TMS320C54xTM DSP汇编语言与混合编程 * 直接寻址 指令中的7 bit是一个数据页内的偏移地址,而 所在的数据页则由数据页指针DP或SP决定,该偏移值加上DP 和SP的值决定了在数据存储器中的实际地址; * 间接寻址 按照辅助寄存器中的地址访问存储器; * 存储器映射寄存器寻址 通过寻址存储器映射寄存器实现 寻址; * 堆栈寻址 把数据压入和弹出系统堆栈。

第四章_TMS320C54x的软件开发_2

第四章_TMS320C54x的软件开发_2

【例4.5】 MEMORY命令的使用。 MEMORY { PAGE 0: ROM: origin=0c00h, length=1000h; origin=80h, length=200h;
PAGE 1:
}
SCRATCH: origin=60h, length=20h;
ONCHIP:
上述MEMORY命令所定义的系统的存储器配置如下: PAGE 0为程序存储器,名ROM,起始地址0C00H,长度4K字。 PAGE l为数据存储器,名SCRATCH,起始地址60H,长32字。 PAGE l为数据存储器,名ONCHIP,起始地址80H,长度512字。
把程序中的内容都汇编到.text段。
③汇编器对不同类型段的处理不同。
1. 未初始化段
• 未初始化段(Uninitialized sections)由.bss和.usect伪指令 建立。 • 未初始化段就是在目标存储器中的保留空间,以供程 序运行过程中的变量作为临时存储空间使用。
• 在目标文件中,这些段中没有确切的内容,通常它们
4.4.1 COFF文件中的段
段(Sections)是COFF文件中最重要的概念。 段——就是在编写汇编语言源程序时,采用的代码块或
数据块,它占据存储器的某个连续空间。
① 在编写汇编语言源程序时,程序是按段组织的; ② 每行汇编语句从属一个段,由伪指令标明该段的属性;
③ 一个目标文件中的每个段都是分开的和各不相同的。
1. MEMORY命令 作用:定义系统中所包含的各种形式的存储器,以及 它们占据的地址范围。 句法: MEMORY {
PAGE0: name 1[(attr)]: orign=constant, length=constant; PAGEl:name n[(attr)]: orign=constant, length=constant;

第4章TMS320C54x汇编指令系统

第4章TMS320C54x汇编指令系统

表4-8 与逻辑运算指令
表4-9 或逻辑运算指令
表4-10 异或逻辑运算指令
表4-11 移位逻辑运算指令
表4-12 测试指令 返回本节
4.2.3 程序控制指令
程序控制指令包括分支转移指令、子程序调用指 令、中断指令、返回指令、重复指令、堆栈操作 指令及混合程序控制指令,分别如表4-13、表414、表4-15、表4-16、表4-17、表4-18及表4-19 所示。
表4-2 加法指令
表4-3 减法指令
表4-4 乘法指令
表4-5 乘加和乘减指令
表4-6 双精度(32位操作数)指令
表4-7 专用指令 返回本节
4.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.2.4 加载和存储指令
加载和存储指令包括加载指令、存储指令、条件 存储指令、并行加载和存储指令、并行加载和乘 法指令、并行存储和加/减法指令、混合加载和存 储指令,分别如表4-20、表4-21、表4-22、表423、表4-24、表4-25、表4-26及表4-27所示。加 载指令是将存储器内容或立即数赋给目的寄存器; 存储指令是把源操作数或立即数存入存储器或寄 存器。
4.1 指令系统中的符号和缩写
表4-1 指令系统中的符号和缩写
返回首页
返回本节
4.2 指令系统
4.2.1 算术运算指令 4.2.2 逻辑运算指令 4.2.3 程序控制指令 4.2.4 加载和存储指令

第四章_TMS320C54x的软件开发_1

第四章_TMS320C54x的软件开发_1

5.浮点数常量 由整数、小数点、小数部分和指数部分组成 浮点数常量:由整数 小数点、 浮点数常量 由整数、 +(-)nnn.nnnE(e)+(-)nnn 整数 小数 指数 有效的浮点数常量: 有效的浮点数常量 3.0、3.14、-0.314e13、+314.59e-2 、 、 、 6.字符常量 由单引号括住的一个或两个字符组成。它在机器内 字符常量:由单引号括住的一个或两个字符组成。 字符常量 由单引号括住的一个或两个字符组成 部由8位 码来表示一个字符。 部由 位ASCII码来表示一个字符。 码来表示一个字符 有效的字符常量: 内部表示为61h), '''D' (内部表示为 内部表示为2744h) 有效的字符常量:'a' (内部表示为 内部表示为 内部表示为 7.汇编时常量 用.set伪指令给一个符号赋值。 汇编时常量:用 伪指令给一个符号赋值 伪指令给一个符号赋值。 汇编时常量 例如: 例如: shift .set 3 将常数值3赋给符号 赋给符号shift ; 将常数值 赋给符号 LD #shift, A ; 再将 赋给 累加器 再将3赋给 赋给A累加器
.usect
.text
.def .ref .mmregs
确认一个在当前模块中定义, 能其他模块引用的符号 确认一个在其他模块中定义, 但能在本模块引用的符号 将DSP各寄存器名定义为全局 符号,这样就可以直接根据符 号引用寄存器
1. 段定义伪指令(5条) 段定义伪指令( 条 就是在编写汇编语言源程序时, 代码块或 段——就是在编写汇编语言源程序时,采用的代码块或数 就是在编写汇编语言源程序时 采用的代码块 据块,它占据存储器的某个连续空间。 据块,它占据存储器的某个连续空间。 在编写汇编语言源程序时,程序是按段组织的; ① 在编写汇编语言源程序时,程序是按段组织的; ② 每行汇编语句从属一个段,由伪指令标明该段的 每行汇编语句从属一个段, 属性; 属性; 一个目标文件中的每个段都是分开的和各不相同的。 ③ 一个目标文件中的每个段都是分开的和各不相同的。 作用:把汇编语言程序的各个部分划分在适当的段中。 作用:把汇编语言程序的各个部分划分在适当的段中。

轻松学会DSP——第4章-TMS320C54x软件开发

轻松学会DSP——第4章-TMS320C54x软件开发

汇编器对段的处理
2.2.已初始化段 已初始化段包含可执行代码或已初始化数据。
这些段的内容存储在目标文件中,加载程序 时再放到TMS320C54X存储器中。三个用于 建立初始化段的伪指令句法分别为: .text [段起点] .data [段起点] .sect “段名”[,段起点]
汇编器对段的处理
件为真时要汇编代码块。 .else — 标志若.if条件为假时要汇编代码块。 .endif — 标志条件块的结束,并终止该条件代码块。
汇编伪指令
3.引用其他文件 .include '文件名' — 将指定文件复制到当前位置,其
内容可以是程序、数据、符号定义等。 .copy '文件名' — 与.include类似。 .def 符号名 — 在当前文件中定义一个符号,可以被
归档器
Option:归档器工作 -q :不显示状态栏及相关信息; -s :打印全局变量;
Libname: 库文件名 Filename:目标文件
Ar500 -a function sine.obj cos.obj flt.obj
3 、连接器
lnk500 [ -options] filename 1 . ... filename n -e global_symbol:定义程序的进入点; -c:使用C编译器的ROM初始化模式; -cr:使用C编译器的RAM初始化模式; -i dir:指定库文件的路径; -l filename:指定连接时使用的库文件名; -m filename:生成map文件; -o filename:指定生成的out文件名。系统缺省
链接器对段的处理有两个功能。首先,它将 汇编器产生的COFF目标文件(.obj文件)中 的各种段作为输入段,当有多个文件进行链 接时,它将输入段组合起来,在可执行的 COFF输出模块中建立各个输出段。其次,链 接器为输出段选择存储器地址。

第4章 TMS320C54x汇编指令系统

第4章  TMS320C54x汇编指令系统

Viterbi译码指令DADST、DSADT、CMPS
在信道均衡和解码中经常会使用到Viterbi算法,C54x为此提 供了专门的硬件和指令。根据输入信号确定分支似然概率增加量 D1/D2,放在T寄存器中,TRN存储可能信号译码输出。
相关指令应用
第4章 TMS320C54x汇编指令系统


4.1 指令系统中的符号和缩写 4.2 指令系统
特殊指令使用说明
FIRS指令
FIRS指令用于线性相位滤波器的处理。一个如下图的8阶线性 相位滤波器的输出表达式:
FIRS指令使用方法: FIRS *AR2+, *AR3+, COEF
FIR滤波的两指令MAC、FIRS
RPTZ A,#(N-1) ;重复MAC指令N次,先将A清零
MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 完成滤波计算。注意FIR滤波 ;系数存放在数据存储区 RPTZ B, #(N/2-1) 重复FIRS指令N/2次,先将B清零 FIRS *ar2+0%, *ar3+0%,filter_coff+N/2 ;完成滤波计算。注意FIR滤波系数 ;存放在程序存贮filter_coff为 ;系数起始地址

第4章TMS320C54xTM DSP汇编语言与混合编程

第4章TMS320C54xTM DSP汇编语言与混合编程
相应的格式,这样汇编器才能将源文件转换为机器语言的目标
文件。C54x DSP汇编语言源程序由源说明语句组成,包含汇编
语言指令、汇编伪指令、宏伪指令和注释等,一般一句程序占 据编辑器的一行。由于汇编器每行最多只能读200个字符,因此
源语句的字符数不能超过200个,一旦长度超过200个字符,汇
编器将自行截去行尾的多余字符并给出警告信息。如果截去的 是注释,那么不影响程序的正确执行;但如果截去了语句的执
第4章 TMS320C54xTM DSP汇编语言与混合编程 续表二
符号 k9 1k Lmem mmr MMR MMRx MMRy ( ) [ ] 说 明 9 位立即数(0≤k9≤7) 16 位长立即数 使用长字寻址的 32 位单访问数据存 储器操作数 存储器映射寄存器 存储器映射寄存器, AR0~AR7 或 SP 寄存器或存储单元包含的内容 表示可选项 符号 uns XF XPC Xmem Ymem # ‖ 说 明
缀,将操作数的内容作为地址。
第4章 TMS320C54xTM DSP汇编语言与混合编程 4.2.2 汇编指令介绍 C54x DSP按指令的功能分类,可分为如下四类: * 数据传送指令; * 算术运算指令; * 逻辑运算指令; * 程序控制指令。
第4章 TMS320C54xTM DSP汇编语言与混合编程
第4章 TMS320C54xTM DSP汇编语言与混合编程 (2) 标号为可选项。若要使用标号,则必须从第1列开始。 标号长度最多为32个字符,由A~Z,a~z,0~9,_和$等组成,
但第1个字符不能为数字。标号后可以跟一个冒号(:),但并不
作为标号的一部分。 (3) 每个域必须由1个或多个空格分开,制表符等效于空格。 (4) 注释是可选项,开始于第1列的注释须用星号或分号(*

第4章 TMS320C54x的指令系统4.1-4.3

第4章 TMS320C54x的指令系统4.1-4.3

• 乘加指令(MAC)和乘减指令(MAS);
• 双数/双精度指令(DADD、DSUB); • 特殊操作指令(ABDST、SQDST)。
第4章
TMS320C54x指令系统
(1) 加法指令(13条)《附录A 》
说明:不同的加法指令用途不同; ADD:不带进位; ADD〈〈:不带进位、移位;
ADDC:带进位;
TMS320C54X指令系统
TMS320C54X共有205条指令 按功能分为4大类(每大类又分为若干小类) : • 算术运算指令; • 逻辑运算指令; • 程序控制指令; • 存储和装入指令。
第4章
TMS320C54x指令系统
1. 算术运算指令(79条分为6小类,附录A)
• 加法指令(ADD);
• 减法指令(SUB); • 乘法指令(MPY);
第4章
TMS320C54x指令系统
(2) 减法指令(13条)《附录A 》
说明:①SUBS用于无符号数的减法运算;
SUBB用于带借位的减法运算(如32位扩展精度的减法); SUBC为条件减法 .
②使用SUBC重复16次减法,就可以完成除法功能。
第4章
TMS320C54x指令系统
(2)、减法指令
第4章
第4章
TMS320C54x指令系统
4.2.3字符串
是由双引号括起来的一串字符。 下列情况中伪指令使用字符串:
①说明文件
– 例如: .copy ②说明段名 – 例如: .sect “sectionname” ③说明数据初始化 “filename”
– 例如: .byte “charstfing”
④作为.string伪指令的操作数 – 例如: .string “ABCD”

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数据寻址方式-蓝

第四章  TMS320C54x数据寻址方式-蓝

[ ]中的 内容为可 选择部分
2010-12-14
供本程序的其它部分或其它程序调用。 标号是任选项,标号后面可以加也可 以不加冒号“:”。
指令统 2
要 点
1.标号必须从第1列写起, 1.标号必须从第1列写起, 标号必须从第 2.标号最多可达32个字符,可以是A 2.标号最多可达32个字符,可以是A~Z,a~z,0~9, 标号最多可达32个字符 _,以及$,但标号的第1个字符不能是数字。 以及$ 但标号的第1个字符不能是数字。 3.引用标号时,标号的大小写必须一致。 3.引用标号时,标号的大小写必须一致。 引用标号时 4.标号的值就是段程序计数器SPC的值。 4.标号的值就是段程序计数器SPC的值。 标号的值就是段程序计数器SPC的值 5.如果不用标号,则第一个字母必须为空格、分号 5.如果不用标号,则第一个字母必须为空格、 如果不用标号 空格 或星号(*)。 星号(
17
例:做A=X+Y=1500H .text RSBX CPL LD #3 , DP LD @X , A LD #4 , DP ADD @Y , A X: 01FFH Y: 0200H 0180H
数据存存器 0001 1000 0500
0000 0001 1111 1111B 0000 0001 1000 0000B
2010-12-14
5.间接寻址 .
(1)单操作数寻址 LD *AR1, B
单数据存储器( 可以使用的辅助寄存器: 单数据存储器(Smem)操作数间接寻址可以使用的辅助寄存器: )操作数间接寻址可以使用的辅助寄存器 AR0、AR1、AR2、AR3、AR4、AR5、AR6、 AR0、AR1、AR2、AR3、AR4、AR5、AR6、AR7
2010-12-14

第4章 TMS320C54x汇编语言程序设计PPT课件

第4章  TMS320C54x汇编语言程序设计PPT课件

2020/8/17
6
⑤ 程序中注释是可选项。如果注释在第一列开始时,前面必 须标上星号“*”或分号“;”,在其他列开始的注释前面必须 以分号“;”开头;
⑥ 如果源程序很长,需要书写若干行,可以在前一行用反斜 杠字符(\)结束,余下部分接着在下一行继续书写。
2020/8/17
7
1.标号 所有汇编指令和大多数汇编伪指令都可以选用标号,供本程序或 其它程序调用。使用标号时应注意: ① 标号必须从语句的第1列写起,标号后可附加冒号“:” ;
2020/8/17
20
【例】 有效定义的表达式。
label1
label2 X goodsym1 goodsym3 goodsym4
.data .word .word .word .word .set .set .set .set
0 1 2 3 50h l00h + X label1 label2-label1
2020/8/17
23
4.2 堆栈的使用方法
当程序调用中断服务程序或子程序时,需要将程 序计数器PC的值和一些重要的寄存器值进行压栈保 护,以便程序返回时能从间断处继续执行。
’C54x提供一个用16位堆栈指针SP寻址的软件 堆栈。
当向堆栈中压入数据时,堆栈是从高地址向低地 址方向填入,堆栈指针SP先减1,然后将数据压入堆 栈。
2020/8/17
10
指令:
❖算术运算指令 ❖逻辑运算指令 ❖程序控制指令 ❖装入和存储指令
2020/8/17
11
伪指令
伪指令为程序提供数据、控制汇编过程。 伪指令在汇编时,不产生目标代码。
2020/8/17
12
3. 操作数
操作数是指指令中参与操作的数值或汇编伪指令定义的内容, 紧跟在助记符的后面,由一个或多个空格分开。

第4章 TMS320C54x汇编指令系统

第4章 TMS320C54x汇编指令系统

(abc)
小括号表示一个寄存器或存储单元的内容
xy
x值被传送到y(寄存器或存储单元)中
r(n-m)
表示寄存器或存储器r的第n~m位
<<nn
移位nn位,nn为正时左移,为负时右移
||
表示两指令并行操作
\\
循环左移
//
循环右移
X
X取反
|X|
X取绝对值
AAH
AA代表一个十六进制数
11
指令系统中的符号、缩写、记号与运算符
1/1
4 ADD Smem [,SHIFT], src[,dst] dst=src+Smem<< SHIFT
操作数移位后加至累加器
2/2
5 ADD Xmem, SHFT, src
src=src+Xmem<< SHFT
操作数移位后加至累加器
1/1
6 ADD Xmem, Ymem, dst
dst=Xmem<<16+Ymem<<16
说明
字数/指 令周期数
1 ADD Smem, src
src=src+Smem
操作数加至累加器
1/1
2 ADD Smem, TS, src
src=src+Smem<<TS
操作数移位后加至累加器
1/1
3 ADD Smem, 16, src [, dst]
dst=src+Smem<<16
操作数左移16位加至累加器
8 5位移位数(-16≤SHIFT≤15)
指令系统中的符号、缩写、记号与运算符
符号
含义
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1
1
00002 0000!
00003 8000!
ADD ghi,A
STL A,adr
第4 章
TMS320C54x汇编语言程序设计
4.2 TMS320C54x汇编语言程序设计的 基本方法
DSP的软件开发一般有以下几种方式: (1) 直接编写汇编语言源程序; (2) 编写C语言程序; (3) 混合编程(既有C代码,又含汇编代码)。
MVPD
LD
table,*AR1+
@x,A
第4 章
TMS320C54x汇编语言程序设计
ADD LD
@y,A A,3
; A=x+y ; A=(x+y)*8
SUB
STL end: B .end
@w,A
A,@z end
; A=(x+y)*8-w
⑦ 浮点常数:是一串十进制数,可带小数点、分 数和指数部分。
第4 章
TMS320C54x汇编语言程序设计
2.符号 符号用作标号、常数和替代符号。符号名可以是
长达200个字符的字母(A~Z,a~z)、数字(0~9)加上$
或下划线(_)。第一个字符不能是数字,符号中间不能 有空格。符号分大小写,例如:Abc。
2) 表达式溢出 在汇编的过程中执行算术运算后,汇编器将检查溢 出状态。一旦出现上溢和下溢,它都发出值被截断了 的警告信息,但在做乘法时,汇编器不检查溢出状态。 3) 条件表达式
汇编器在任何表达式中都支持关系操作,这对条件
汇编特别有用。关系运算符如下: = (等于) == (等于) != (不等于) <= (小于等于) > (大于) < (小于) >= (大于等于)
分号或星号(*)。
第4 章
TMS320C54x汇编语言程序设计
2.助记符 助记符跟在标号的后面。助记符不能从第一列开
始。助记符包含指令、伪指令、宏命令和宏调用。作
为指令,一般用大写;伪指令和宏命令则以句号 (.) 开 始,且为小写。伪指令可以形成常数和变量,当用它
控制汇编和链接过程时,可以不占存储空间。
第4 章
TMS320C54x汇编语言程序设计
第4章 TMS320C54x汇编语言程序设计
4.1 TMS320C54x汇编语言的基本概念 4.2 TMS320C54x汇编语言程序设计的基本方法 4.3 TMS320C54x汇编语言程序的编辑、汇编与链接过程 4.4 汇编器 4.5 链接器 4.6 Simulator的使用方法 4.7 汇编程序举例
.def 变量1[ ,… , 在当前模块中定义,并可在别的模块中使用 变量n]
.ref 变量 1[ , … , 在当前模块中使用,但在别的模块中定义 变量n]
第4 章
TMS320C54x汇编语言程序设计
伪指令
句 法
作用
global
.global变量1[,…, 可替代 .def和 .ref伪指令 变量n]

块;.usect用于为堆栈保留一块存储空间;.text用于设
置 代 码 段 。 另 外 , .bss 用 于 为 变 量 保 留 一 块 存 储 空 间;.sect常用于定义中断向量表。
程序的基本结构有四种:顺序结构、分支结构、
循环结构和子程序结构。
第4 章
TMS320C54x汇编语言程序设计
4.2.2 顺序结构程序
; 开辟堆栈空 间
; 为变量分配4个字的空间
.def
.data
start
第4 章
TMS320C54x汇编语言程序设计
table: .word .text
6,7,9
start: STM
#0 ,SWWSR
; 零等待状态
; 设置堆栈指针 ; AR1指向x ; 从程序存储器传送 3
STM #STACK+10H,SP STM #x,AR1 RPT #2 个值至数据存储器
源程序。
第4 章
TMS320C54x汇编语言程序设计
1.宏定义 宏命令可以在源程序的任何位置定义,但必须在
宏调用之前先定义好。宏定义也可以嵌套。定义如下:
宏命令名 .macro ; 宏体 <形式参数>

.endm
第4 章
TMS320C54x汇编语言程序设计
2.调用 宏命令定义好之后,就可以在源程序中将宏命令 名作为指令来调用这个宏了。格式如下: 宏命令名 <实际参数>
第4 章
TMS320C54x汇编语言程序设计
3.宏展开
当源程序中调用宏命令时,汇编时就将宏命令展 开。在宏展开时,汇编器将实际参数传递给形式参数, 再用宏定义替代宏调用语句,并对其进行汇编。上例 的宏展开如下: 1 1 1 00000 1000! 00001 0000! LD abc,A
ADD def,A
************************************************
第4 章
TMS320C54x汇编语言程序设计
.title "ex41.asm" .mmregs
STACK
.bss .bss .bss .bss
.usect
x ,1 y ,1 w ,1 z ,1
“STACK”,10H
据存储器中。
.sect建立包含代码和数据的自定义段,常用于定 义中断向量表。
第4 章
TMS320C54x汇编语言程序设计
2.常数初始化伪指令 常数初始化伪指令如表4.3.3所示。
第4 章
TMS320C54x汇编语言程序设计
4.1.4 TMS320C54x宏命令 TMS320C54x 汇编器支持宏语言。宏命令是源程 序中具有独立功能的一段程序代码,它可以根据用户 的需要,由用户创建自己的指令。宏命令一经定义, 便可在以后的程序中多次调用,从而可以简化和缩短
(1) 所有语句必须以标号、空格、星号(*)或分号开始。 (2) 所有包含伪指令的语句必须在一行内完全指定。
(3) 若使用标号,则标号必须从第一列开始。
(4) 语句的每部分必须用一个或多个空格分开,Tab 键与空格等效。
第4 章
TMS320C54x汇编语言程序设计
1.标号
所有指令或大多数伪指令前面都可带有语句标号, 供本程序的其他部分或其他程序调用。标号是任选项, 标号后可以加也可以不加冒号(:) 。标号必须从第一列 开始,其最多可长达32个字符(A~Z, a~ z,0~9, _ 和 $) ,但第一个字符不能是数字。引用标号时,标号 的大小写必须一致,标号的值就是段程序计数器(SPC) 的当前值。若不用标号,则第一个字母必须为空格、
第4 章
TMS320C54x汇编语言程序设计
③ 八进制数:用数字0~7表示,其后缀为Q或q。 ④ 十六进制数:用数字0~9及字母A~F表示,其 后缀为h或H。 ⑤ 字符常数:是由单引号 („‟) 括起来的 1 或 2 个字 符组成的字符串,每个字符在内部表示为8位ASCII码。
⑥ 字符串:是由双引号(“”)括起来的一串字符。
.bss 符号,字数 符号 .usect “段名”,字数
第4 章
TMS320C54x汇编语言程序设计
2) 已初始化段
.text、.data和 .sect命令建立已初始化段。已初始 化段包括可执行代码或已初始化的数据。在目标文件 中,这些段中都有确切内容,当加载程序时再将这些 内容放到 TMS320C54x 的存储器中。每个初始化段都 可以重新定位,也可以引用在其他段中定义的符号, 链接器会自动处理段间的相互引用。这三条命令的句 法如下:
设置16位带符号整型量
第4 章
TMS320C54x汇编语言程序设计
伪指令
bss sect usect def ref
句 法
.bss 符号,字数 .sect “段名”[,
作用
为未初始化的变量保留存储空间
段起点]
符号 .usect “段 名” ,字数
建立包含代码和数据的自定义段
为未初始化的变量保留存储空间的自定义段
第4 章
TMS320C54x汇编语言程序设计
4.1.3 TMS320C54x伪指令
TMS320C54x 伪指令给程序提供数据、控制汇编 过程。具体实现以下任务: (1) 将数据和代码汇编到特定的段。 (2) 为未初始化的变量保留存储空间。
(3) 控制展开列表的形式。
(4) 存储器初始化。
第4 章
.text [段起点]
.data [段起点] .sect "段名”[,段起点]
第4 章
TMS320C54x汇编语言程序设计
.text 后是汇编语言程序的正文。经汇编后, .text 后的是可执行程序代码,一般存放于程序存储器区域 中。 .data 后是已初始化数据,有 int 和 word 两种数据 形式。由命令文件可以将定义的数据存放于程序或数
第4 章
TMS320C54x汇编语言程序设计
3.操作数 操作数是指指令中的操作数或伪指令中定义的内
容。操作数之间必须用逗号 (,) 分开。有的指令无操作
数,如指令NOP。指令中的操作数可以是寄存器、地 址、常数、算术或逻辑表达式。
4.注释
注释从分号 (;) 开始,可以放在指令或伪指令的后 面,也可以单独占一行或数行。注释是任选项。如果 注释从第1列开始,也可以用星号(*)。
TMS320C54x汇编语言程序设计
1) 未初始化段 .bss和 .usect命令建立未初始化段。未初始化段就是 TMS320C54x存储器中的保留空间,它通常被定位在 RAM区。在目标文件中,这些段中没有确切内容,在 程序运行时,可以利用这些存储空间存放变量,变量一
般存放于数据存储器区域中。这两条命令的句法如下:
相关文档
最新文档