第04.1章 C54xDSP汇编语言

合集下载

第4章 汇编语言程序开发工具

第4章 汇编语言程序开发工具

目标存储器
.bss
RAM
E2PROM
.data
.text
ROM
2013年8月2日
DSP原理及应用
22
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段 的,并将段名相同的语句汇编在一起。
汇编器有5条伪指令可识别汇编语言程序的各个 部分: ● .bss ——定义未初始化段 ● .usect ——定义未初始化段 ● .text ——定义已初始化段 ● .data ——定义已初始化段 ● .sect ——定义已初始化段
COFF目标文件中的段有两种基本类型。
(2) 未初始化段 在存储空间中,为未初始化数据保留存储空间。
它包括:
.bss段——未初始化段;
.usect段——未初始化段,由汇编命令建立的命
名段(自定义段)。
2013年8月2日 DSP原理及应用 20
第4章 汇编语言程序开发工具
4.3.1 COFF文件的基本单元 3. 段与目标存储器的对应关系 汇编器的任务:在汇编过程中,根据汇编命令用
2013年8月2日 DSP原理及应用 6
第4章 汇编语言程序开发工具
2. ’C54x的开发工具
(1)代码生成工具:
助记符指令—代数式指令翻译器:用来将包含 助记符指令的汇编语言源文件转换成包含代数式指令 的汇编语言源文件。 建库实用程序:用来建立用户自己使用的、并 用C/C++语言编写的支持运行的库函数。 十六进制转换程序:可以很方便地将COFF目标 文件转换成TI、Intel、Motorola等公司的目标文件 格式。
2013年8月2日 DSP原理及应用 16
第4章 汇编语言程序开发工具

第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列开始,也可以用星号(*)。

第四章 C54xDSP汇编语言与混合编程

第四章 C54xDSP汇编语言与混合编程

例:00000000B=0(十进制) 0101010B=42 (十进制) 2、八进制整型常数 后缀加Q或q;或前缀加0 例:10Q=8(十进制) 0226=150 (十进制) 3、十进制整型常数 无后缀 例:1000=1000(十进制) -32768=-32768 (十进制)
4、十六进制整型常数 后缀加H或h;或前缀加0x 例:10H=16(十进制) 0x12=18 (十进制) 5、浮点常数 浮点数表示方法:[+|-][nn].[nn[E|e[+|-]nn]] nn代表十进制数字串,浮点数前可带+或-,必须制定小数 点。 例:4.e5为有效浮点数,但4e5为非法浮点数。 4.0 .4 -.314e13 +314.59e-2
堆栈的使用方法
在用堆栈之前,要在RAM中开辟一个堆栈区.方法: size .set 120 stack .usect “STACK”, size STM # stack + size, SP 前两句是在RAM中定义一个名为STACK的保留空间, 共120个单元.第三句将这个空间的高地址赋给SP. 设置好就可以用了 CALL pmad RET
2、初始化段 .text [段起点] .data [段起点] .sect “段名”[,段起点] 其中,段起点是可选项,若定义就是为段程序计数器(SPC) 定义一个起始值,若缺省,则SPC为0。 3、子段 子段语法:基段名:子段名 例如:在.text段内建立一个名为_fuct的子段 .sect “.text: _fuct”
.lst列表文件
注意: 汇编器遇到.text, .data, .sect命令时立即停止汇编至当前块 中,且开始汇编至相应的块中。当会期遇到.bss, .usect命 令并不结束当前块的开始一个新块,只是暂时离开但前块。 .lst列表文件由四部分组成 第一部分(field1):源程序的行号 第二部分(field2):段程序计数器 第三部分(field3):目标代码 第一部分(field1):源程序

第4章 基于C54x汇编语言程序开发工具

第4章 基于C54x汇编语言程序开发工具
13
第4章 汇编语言程序开发工具
4.2 汇编语言程序的编辑、汇编和链接过程 汇编语言程序的编辑、
3. 链接 所谓链接,就是利用’C54x的链接器LNK500, 的链接器LNK500 所谓链接,就是利用’C54x的链接器LNK500, 根据链接器命令文件(.cmd)对已汇编过的一个或多 (.cmd) 根据链接器命令文件(.cmd)对已汇编过的一个或多 个目标文件(.obj)进行链接 生成输出文件(. (.obj)进行链接, (.out) 个目标文件(.obj)进行链接,生成输出文件(.out) 和存储器映像文件(. (.map) 和存储器映像文件(.map) 。 常用的汇编器命令: 常用的汇编器命令: lnk500 %1.cmd
4.3.1 COFF文件的基本单元 COFF文件的基本单元 COFF文件有 种类型:COFF0、COFF1、COFF2。 COFF文件有3种类型:COFF0、COFF1、COFF2。 文件有3 1. 段(sections) 段——是存储器中占据相邻空间的代码或数据块。 ——是存储器中占据相邻空间的代码或数据块 是存储器中占据相邻空间的代码或数据块。 COFF目标文件都包含以下 种形式的段: COFF目标文件都包含以下3种形式的段: 目标文件都包含以下3
链接命令文件名, 指明目标文件 %1.cmd: 调用链接器命令,该文件须指明目标文件、 lnk500: 链接命令文件名 该文件须指明目标文件、 输入文件、输出文件、链接选项和存储器配置要求等。 输入文件、输出文件、链接选项和存储器配置要求等。
14
第4章 汇编语言程序开发工具
4.3 COFF的一般概念 COFF的一般概念
10
第4章 汇编语言程序开发工具
4.2 汇编语言程序的编辑、汇编和链接过程 汇编语言程序的编辑、

第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 :对各段在存储器旳位置进行分配

汇编语言指令PPT课件

汇编语言指令PPT课件

13.03.2021
.
2
第四章 DSP汇编语言基础
C
ST0中的进位标志位;
CC 2位条件代码 (0 CC 3);
CMPT ST1中的比较模式位;
CPL ST1中的编译模式位;
cond 指令操作执行条件;
[D] 延时操作;
DAB D数据地址总线;
DAR DAB 地址寄存器;
dmad 16位立即数存储器地址(0 dmad 65535) ;
ADD #lk,16,src[,dst] ;dst=src+ #lk <<16
ADD src[,SHIFT],[,dst];dst=dst+src<<SHIFT
ADD src,ASM[,dst];dst=dst+src<<ASM
ADDC Smem,src; src=src+Smem+C
ADDM #lk,Smem ;Smem=Smem+#lk
src 源累加器 (A or B);
ST0, ST1 状态寄存器 0, 状态寄存器 1
SXM Sign-extension mode bit in ST1中符号扩展模式位;
T
暂存寄存器;
TC ST0中的测试/控制位;
TOS 堆栈栈顶;
TRN 转换寄存器;
TS T (–16TS 31)的5–0位指定的移位值;
共有指令129条,由寻址方式衍生至216条。 ➢第一类 算数运算指令
加法指令13条:
ADD Smem,src ;src=src+Smem
13.03.2021
.
9
第四章 DSP汇编语言基础
不同移位寻址方式衍生:

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

第4章-汇编语言程序设计
第4章 汇编语言程序设计
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器

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

第4章 'C54x的汇编语言程序设计(1)1
2013年7月11日 DSP原理及应用 1
第4章 汇编语言程序开发工具
4.1 TMS320C54x软件开发过程
1. ’C54x应用软件开发流程
宏源文件 C源文件
存档器
汇编 源文件
C编译器
宏库
汇编器
汇编 源文件
存档器
COFF 目标文件
建库工具
目标 文件库
链接器
运行时 支持库
调试工具
可执行的
COFF文件
2013年7月11日 DSP原理及应用 16
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 1. 未初始化段
未初始化段就是在’C54x存储器中保留空间, 通常它们被定位在RAM区。在目标文件中,这些段中 没有确切的内容。 未初始化段分为默认的和命名的两种,分别由 汇编器伪指令.bss和.usect产生。
DSP原理及应用
6
第4章 汇编语言程序开发工具
2. ’C54x的开发工具
(2)代码调试工具:
C/汇编语言源码调试器:与软件仿真器、评 价模块、软件开发系统、软件仿真器等配合使用。
软件仿真器:是一种模拟DSP芯片各种功能并
在非实时条件下进行软件调试的调者工具DSK:是TI公司提供给初学者进行 DSP编程练习的一套廉价的实时软件调试工具。
.text
ROM
2013年7月11日
DSP原理及应用
15
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 汇编器对段的处理是通过段伪指令来区别各个段 的,并将段名相同的语句汇编在一起。
汇编器有5条伪指令可识别汇编语言程序的各个 部分: ● .bss ——定义未初始化段 ● .usect ——定义未初始化段 ● .text ——定义已初始化段 ● .data ——定义已初始化段 ● .sect ——定义已初始化段

c54xx系列DSP汇编指令详解

c54xx系列DSP汇编指令详解
x
意义 或运算 异或运算
减1 赋值于 表示一个立即数 x 的补码
|x|
x 的绝对值
0x
十六进制数据
>>
右移
<<
左移
×
乘法
*
指针指向的地址
TMS320C54xx 系列 DSP 的指令一共有 129 条,按功能分为如下几类:算术指令、逻 辑指令、程序控制指令、存储和装入指令以及循环指令。下面根据每种指令功能的不同,
目的累加器的反 if dst=A,then dst_=B if dst=B then dst_=A
E 地址总线 EAB 地址寄存器 23 位立即数表示的程序存储器地址 ST1 寄存器中的分数方式位 十六进制数据 十六进制数据 累加器 A 的高端(位 32~16) ST1 寄存器中的保持方式位 中断标志寄存器 ST1 寄存器中的中断屏蔽位 少于 9 位的短立即数
3 位立即数(0 ≤ k3 ≤ 7 ) 5 位立即数(-16 ≤ k5 ≤ 15 ) 9 位立即数(0 ≤ k9 ≤ 115 )
16 位长立即数 使用长字寻址 32 位单数据存储器操作数 存储器映射寄存器,AR0~AR7 或 SP
存储器映射寄存器,AR0~AR7 或 SP
紧跟 XC 指令的字数,n=1 或 2 指定在 RSBX、SSBX 和 XC 指令中修改的状态寄存器 N=0,状态寄存器 ST0 N=1,状态寄存器 ST1 ST0 寄存器中的累加器 A 的溢出标志 ST0 寄存器中的累加器 B 的溢出标志 目的累加器(A 或 B)的溢出标志 目的累加器反(A 或 B)的溢出标志 源累加器(A 或 B)的溢出标志 ST1 寄存器中的溢出方式位 16 位立即数表示的端口地址
③ 乘法指令

C54x DSP的寻址方式及代数汇编指令

C54x DSP的寻址方式及代数汇编指令

附录三:C54x DSP的寻址方式及代数汇编语言指令C54x DSP的寻址方式TMS320C54x系列DSP的存储空间包括程序存储空间、数据存储空间和I/O空间。

每个空间都有64K字的大小。

因此,如果采用直接的寻址方式则需16位的地址。

为了节省程序存储空间和提高程序的运行速度,经常采用间接寻址等方法以便使指令字节数减少。

在本章内将对C54x的寻址方式做较为详细的介绍。

1.程序空间寻址16位直接寻址方式主要应用于程序的调用(CALL pmad)、跳转指令(GOTO pmad)和块重复指令((d)blockrepeat)中。

具体说明如下:1、pmad指的是16位程序计数器PC的内容,它代表的是程序存储空间的地址(programmemory address);2、CALL指令和GOTO指令包括无条件的CALL和GOTO和有条件的CALL和GOTO。

3、块重复指令(d)blockrepeat的起始地址存于寄存器RSA(Repeat StartingAddress)中,结束地址存于寄存器REA(Repeat Ending Address)中,重复次数存于寄存器BRC(Block Repeat Counter)中。

4、PC 、BRC、 RSA、 REA位于PAGEN(Program Address Generator)当中,见图(3A-1)。

图(3A-1)PAGEN2. 数据空间寻址数据空间的寻址正如同8086微机的寻址问题一样重要,只有正确掌握C54x数据空间的寻址方式才能正确编制C54x的汇编程序。

C54x提供了7种基本寻址方式:立即寻址.●绝对寻址.●累加器寻址.●直接寻址.●辅助寄存器间接寻址.●内存映射寄存器寻址.●堆栈寻址.在本节中将详细说明这7种寻址方式。

相信详细阅读本节会有助于对C54x处理器的认识和理解,并在程序的编制中熟练地运用这些寻址方式。

2.1 立即寻址立即寻址即利用立即数进行寻址。

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

TMSCx汇编语言程序设计概要

TMSCx汇编语言程序设计概要


1110001b或1110001B 1234或+1234或-11234 0A40h或0A40H或0xA40 1.623e-23 ‘D’ “this is a string”
DSP原理及应用 8
缺省型 仅用于C语言
第4章 TMS320C54x汇编语言程序设计
2.符号
汇编程序中的符号用于标号、常数和替代字符。 由字母、数字以及下划线和美元符号(A~Z,
a~z,0~9,_和$)等组成; 符号名最多可长达200个字符; 在符号中,第1位不能是数字,并且符号中不 能含空格。
符号区分大小写。
2019年1月11日 DSP原理及应用 9
第4章 TMS320C54x汇编语言程序设计
3.表达式
表达式可以是常数、符号,或者是由算术运算符 分开的一系列常数和符号。 有效表达式的值: -32 768~32 767 影响表达式的主要因素: ① 圆括号( )。圆括号内的表达式最先计算;
= 等于 > = 大于或等于 = = 等于 < = 小于或等于 != 不等于 > 大于 < 小于
条件表达式为真时其值为1,否则为0。 表达式两边的操作数类型必须相同
DSP原理及应用 3
第4章 TMS320C54x汇编语言程序设计
1.标号
所有汇编指令和大多数汇编伪指令都可以选用标 号,供本程序或其它程序调用。 ① 标号必须从语句的第1列写起,其后的冒号 “:”可任选; ② 标号为任选项,若不使用标号,则语句的 第一列必须是空格、星号或分号; ③ 标号是由字母、数字以及下划线和美元符 号等组成,最多可达32个字符; ④ 标号分大小写,且第一个字符不能是数字。
② 优先级。’ C54x C语言相似的优 不能用大括号 { }汇编器使用与 或中括号[ ]代替圆括号 ( )。 先级,优先级高的先计算;

DSP汇编语言程序设计

DSP汇编语言程序设计
圆括号内的表达式最先运算,不能用{ }或[ ]来代 替( )。
TMS320C54x汇编器的优先级使用与C语言类似, 优先级高的运算先执行。 表4-1给出了表达式中可用的 运算符及优先级。
表4-1 表达式的运算符及优先级
符号 +、−、~ *、/、% <<、>> +、− <、<=、>、>= !=、= & ^ |
若B为… 绝对 外部 可重新定位 绝对 可重新定位 外部 绝对 可重新定位 外部
则A+B为… 绝对 外部 可重新定位 可重新定位 非法 非法 外部 非法 非法
则A−B为… 绝对 非法 非法 可重新定位 绝对 非法 外部 非法 非法
4.1.3 TMS320C54x伪指令 TMS320C54x伪指令给程序提供数据、控制汇编过程。具体
设置16位无符号整型量 设置16位带符号整型量 为未初始化的变量保留存储空间
.sect “段名”[,段起点]
建立包含代码和数据的自定义段
符号 .usect “段名” ,字数
为未初始化的变量保留存储空间的自定义段
.def 变量1[,…,变量n]
在当前模块中定义,并可在别的模块中使用
.ref 变量1[,…,变量n]
4.2.2 顺序结构程序 顺序结构是最基本、最简单的程序结构形式,程序
中的语句或结构被连续执行。
【例1】 试编制程序,求出下列公式中z的值。 z=(x+y)×8-w 源程序编制如下:
************************************************
* ex41.asm z=(x+y)*8-w
在当前模块中使用,但在别的模块中定义

最新6汇编语言程序设计《TMS320C54XDSP结构、原理及应用》

最新6汇编语言程序设计《TMS320C54XDSP结构、原理及应用》
6汇编语言程序设计《 TMS320C54XDSP结构、原理
及应用》
2
概述
汇编语言源程序格式:
助记符指令一般包含4个部分,其一般组成形式为:
➢ [标号][:] 助记符 [操作数] [;注释]
书写格式规则详见P138,①②③④⑤⑥!
标号—所有汇编指令和大多数汇编伪指令前面都可以带有 标号;必须从第一列开始书写;最多32个字符;由字母、数 字、下划线和$组成,且不能以数字开头;分大小写;冒号 不属于标号名;没有标号的源语句第一列必须为空格、星号 或分号。
◆ 循环操作
.bss x, 10
.bss y,
1
当条件满足时,重复执行某一段程序ta;bl可e: 以通.w过ordBAN1Z,2指,3,4令,5实,6,7现,8。,9,10
指令格式: BANZ
转移地址, 辅助寄存.d器ef start
指令功能:当辅助寄存器不为0时,s则tar转t:至转S移 TM地址;#0否 , SW则W,S顺R 序执
说明
AEQ BEQ ANEQ BNEQ ALT BLT
ALEQ
BLEQ AGT BGT AGEQ BGEQ
A=0 累加器A等于0
AOV
B=0 累加器B等于0
BOV
A0 累加器A不等于0 ANOV
B0 累加器B不等于0 BNOV
A<0 累加器A小于0
C
B<0 累加器B小于0
NC
A0 累加器A小于等于0 TC
FBACC[D] 用累加器的低23位指定的地址加载PC和XPC
【例】5.3.1 分支转移
12.02.2021
湖南理工学院 胡 子程调用
分类
指令
说明
CALL[D] 无条件调用

第4章 汇编语言程序开发工具

第4章 汇编语言程序开发工具

DSP原理及应用
9
第4章 汇编语言程序开发工具
2. ’C54x的开发工具
(2)代码调试工具:
C/汇编语言源码调试器:与软件仿真器、评 价模块、软件开发系统、软件仿真器等配合使用。
软件仿真器:是一种模拟DSP芯片各种功能并
在非实时条件下进行软件调试的调试工具,它不需 目标硬件支持,只需在计算机上运行。 初学者工具DSK:是TI公司提供给初学者进行 DSP编程练习的一套廉价的实时软件调试工具。
2016年11月12日 DSP原理及应用 24
第4章 汇编语言程序开发工具
4.3.2 汇编器对段的处理 1. 未初始化段
未初始化段就是在’C54x存储器中保留空间, 通常它们被定位在RAM区。在目标文件中,这些段中 没有确切的内容。 由这些段定义的空间仅作为临时存储空间,在 程序运行时,可以利用这些存储空间存放变量。 未初始化段分为默认的和命名的两种,分别由 汇编器伪指令.bss和.usect产生。
2016年11月12日 DSP原理及应用 17
第4章 汇编语言程序开发工具
4.3 COFF的一般概念
4.3.1 COFF文件的基本单元 COFF文件有3种类型:COFF0、COFF1、COFF2。
每种类型的COFF文件,其标题格式都有所不同, 但数据部分是相同的。
’C54x汇编器和C编译器产生的是COFF2文件。 链接器能够读/写所有类型的COFF文件,默认时 链接器生成的是COFF2文件,采用-vn链接选项可以选 择不同类型的COFF文件。
12
第4章 汇编语言程序开发工具
4.2 汇编语言程序的编辑、汇编和链接过程
示意图
. cmd 链接命 令文件
.asm 源文件 .obj 目标文件 .out 输出文件
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5、替代符号 可将字符串(变量)赋给符号,这时符号名与该变量等效, 成为字符串的别名。这种用来代表变量的符号称为替代符号。 与符号常量不同,替代符号可以被重新定义。
例: .asg “high”, AR2
6、局部标号
;寄存器AR2
局部标号是一种特殊的标号,使用的范围和影响是临时性 的。局部标号两种定义方法: (1)用$n来定义,n为0~9的十进制数字。 (2)用name?来定义,name是任何一个合法的符号名。
4、十六进制整型常数 后缀加H或h;或前缀加0x 例:10H=16(十进制) 0x12=18 (十进制)
5、浮点常数 浮点数表示方法:[±][n].[n][E|e][±][n] n代表一串十进制数,浮点数前可带+或-,必须指定小数 点。 例:99.e8为有效浮点数,但99e8为非法浮点数。 4.0 .4 -.314e13 +314.59e-2
自动化技术系 姜运芳
E-mail:jiangyf@
第四章 TMS320C54xDSP 汇编语言与混合编程
主要内容
汇编语言程序的编写方法 汇编指令 寻址方式 公共目标文件格式 汇编语言程序设计 混合编程

汇编语言程序的编写方法

汇编语言源程序格式

代数指令语法格式:
[标号区][:]
指令
[;注释区]
;符号SYM1=2 ;将2装入AR1 ;初始化字( 016H )
代数指令举例: SYM1 .set 2 start: AR1= #SYM1 .word 016H
汇编语言中的常数与字符串

汇编器支持8种类型常数,每个常数在汇编器内部都使用
32位保存,常数不作符号扩展。
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续2)
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续3)
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续4)
汇编指令介绍
TMS320C54x的指令系统共有129条基本指令,由 于操作数的寻址方式不同,又可派生至205条指 令。按功能分为如下几类:
表4-1 可以用在表达式中的运算符
2.条件表达式

汇编器支持关系运算符,可用于任何表达式
常用的关系运算符有:
= 赋值; == 等于; != 不等于;
﹥= 大于或等于;﹤=小于或等于;﹥大于;﹤小于
3.表达式的溢出

汇编器会在执行算数操作后,检查上溢和下溢的条件
一旦发现溢出,就发出结果将被截断的警告 汇编器不检查乘法的溢出状态
汇编源程序中的表达式

可以是常数、符号,或用算数运算符连结起来的常数和符 号。 有效范围:-32768~32767(16位带符号二进制数的范围) 影响表达式计算顺序的3个因素:

• 圆括号 • 运算符优先级(同C语言运算符优先级)
• 从左到右计算
1.运算符
TMS320C54x汇编器使用与C语言相似的优先级
例:0ACH等于十六进制的00AC或十进制的172,不 等于-84。
1、二进制整型常数 最多16位二进制数字;后缀为B或b 例:10001000B=136(十进制) 0101010B=42 (十进制) 2、八进制整型常数 最多6位二进制数字;后缀加Q或q,或前缀加0 例:124Q=84(十进制) 0226=150 (十进制) 3、十进制整型常数 无后缀 例:65535=65535(十进制) -32768=-32768 (十进制)
算术运算指令
表4-3-5 乘加和乘减指令
算术运算指令
表4-3-5 乘加和乘减指令(续)
算术运算指令
表4-3-6 双精度(32位操作数)指令
算术运算指令
表4-3-7 专用指令
逻辑运算指令

与指令


或指令
异或指令
移位指令
测试指令
逻辑运算指令
表4-4-1 与逻辑运算指令
逻辑运算指令
label, B label1 ;分支转移到label1
2、符号常数 伪指令.set和.struct/.tag/.endstruct可以用来将常数值赋给 符号名。注意:符号常数不能被重新定义。
例: N .set 14 ;定义常数 item .struct ; item结构定义
3、定义符号常数(-d选项) • -d选项将常数值与符号等同。定义后,在汇编源文件中
可用符号代替和它等同的值。
• -d选项的格式如下:asm500 –d name =[value] name是所要定义的符号名。 value为要赋给符号的值。若value省略,则符号值为1。 4、预先定义的符号常数 (1)$,代表段程序指针(SPC)的当前值;
(2)寄存器符号:AR0~AR7;
(3)存储器映射寄存器由汇编器设置为符号, _large_model指定存储器模式。

二进制整型常数(如011B或011b) 八进制整型常数(如10Q或10q或010) 十进制整型常数(如23) 十六进制整型常数(如78H或78h) 浮点常数(如-3.1e-5) 字符常数(如‘A‟或‘b‟) 字符串(如“sample program”) 汇编-时间常数(如SYM1 .set 2)

一般的装载和存储指令 条件存储指令 并行装载和存储指令 并行装载和乘法指令 并行存储和加、减法指令 并行存储和乘法指令 混合装载和存储指令
加载和存储指令
表4-6-1 加载指令
加载和存储指令
表4-6-2 存储指令
加载和存储指令
表4-5-3 条件存储指令
加载和存储指令
表4-6-4 并行加载和存储指令
助记符指令区
1.
助记符区 机器指令助记符,一般大写 汇编伪指令和宏命令,以“.”开始且为小写
* 一定不能从第一列开始,否则被认为是语句标号
操作数区 操作数可以是常数、符号或表达式 和指令之间用一个或多个空格分开 操作数之间用逗号分开 操作数前缀规定:#后操作数为立即数,*后操作数为间 接地址。 例如:Label: ADD #99, B Label: LD *AR3, B
C54x提供2种汇编指令:

助记符指令: XN .set 5 start: STM #XN, AR0 ADD #1, A, B
; 符号XN赋值为5 ; 将5装入AR0中 ; A+1赋给B
代数指令:
start:
XN .set AR0=#XN B入AR0中 ; A+1赋给B

算数运算指令


逻辑运算指令
程序控制指令

装载和存储(数据传送)指令
算术运算指令

加法指令


减法指令
乘法指令


乘累加指令
乘减指令
双字/双精度指令
特殊操作指令
算术运算指令
表4-3-1 加法指令
算术运算指令
表4-3-2
减法指令
算术运算指令
表4-3-3 减法指令(续)
算术运算指令
表4-3-4 乘法指令
程序控制指令
表4-5-2 子程序调用指令
程序控制指令
表4-5-3 中断指令
程序控制指令
表4-5-4 返回指令
程序控制指令
表4-5-5 重复指令
程序控制指令
表4-5-6 堆栈操作指令
程序控制指令
表4-5-7 混合程序控制指令
装载和存储(数据传送)指令
加载指令是将存储器内容或立即数赋给目的寄存器; 存储指令是把源操作数或立即数存入存储器或寄存器。
语句标号区

必须从第一列开始


可以长达32个字符 由A~Z、a~z、0~9、_或$组成,不能以数字开头 对大小写敏感 后可跟(:),冒号不作为标号名的一部分 若无标号,语句的第一列必须是空格、星号或分号 使用标号时,标号值为段程序计数器SPC的当前值 标号独占一行,将指向下一行指令,值为下一条指令的 SPC的值
2.
注释区

注释开始在第一列,必须用“;”或“*”开头 注释开始在其他列,只能用“;”开头 允许源语句中仅有注释

助记符指令语法格式:
[标号区][:]
助记符
[操作数] [;注释区]
;符号SYM1=2 ;将2装入AR1 ;初始化字( 016H ) ;返回
助记符指令举例: SYM1 .set 2 start: LD # SYM1,AR1 .word 016H RET
汇编语句书写规则

所有语句必须以标号、空格、*号或 ;号开头。
标号是可选项,如需使用,则必须在第一列。 各区之间用一个或多个空格分开,Tab等效于空格。 注释是可选项。注释可以从第一列的 * 号或 ;号 开头;如果从其他列开始,就必须用 ;号开头。

源程序需分行写要用\结束前一行,余下部分在下 一行继续。
例:$n定义的局部标号 $1 LD ADDRA, A ; $1:将ADDRA装入累加器A .newblock ;取消$1的定义,使之可被再次使用 BC $1, ALT ; $1 NOP 例:name?定义的局部标号 mylab? NOP ;局部标号‘mylab‟的定义 B mylab? ;分支转移到mylab
表4-4-2 或逻辑运算指令
逻辑运算指令
表4-4-3 异或逻辑运算指令
逻辑运算指令
表4-4-4 移位逻辑运算指令
逻辑运算指令
表4-4-5 测试指令
程序控制指令

分支转移指令


子程序调用指令
中断指令
返回指令
重复指令 堆栈处理指令 混合程序控制指令
相关文档
最新文档