您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 第4章 TMSC320C54X的软件开发
2020年2月26日DSP技术及应用1第4章TMS320C54x的软件开发4.1TMS320C54x软件开发过程4.2汇编语言程序的编写方法4.3汇编伪指令和宏指令4.4公共目标文件格式——COFF4.5汇编源程序的编辑、汇编和链接过程4.6汇编语言程序设计2020年2月26日DSP技术及应用2第4章TMS320C54x的软件开发4.1TMS320C54x软件开发过程C源文件C编译器汇编源文件汇编器汇编源文件COFF目标文件链接器可执行的COFF文件宏源文件归档器宏库归档器目标文件库建库工具运行时支持库EPROM编程器交叉引用列表器调试工具TMS320C54x绝对地址列表器HEX代码转换工具2020年2月26日DSP技术及应用3第4章TMS320C54x的软件开发4.2汇编语言程序的编写方法4.2.1汇编语言源程序举例start:STM#0,SWWSR;addsnowaitstates.title“example.asm”2020年2月26日DSP技术及应用4第4章TMS320C54x的软件开发4.2.2汇编语言常量汇编器可支持7种类型的常数(常量)。数据类型举例说明二进制1110001b或1110001B八进制226q或572Q十进制1234或+1234或-11234缺省型十六进制0A40h或0A40H或0xA40浮点数1.623e-23仅用于C语言字符‘D’字符串“thisisastring”2020年2月26日DSP技术及应用51.整数常量第4章TMS320C54x的软件开发二进制整数10001000B136(十进制)或88(十六进制)0111100b60(十进制)或3C(十六进制)八进制整数100011Q32777(十进制)或8009(十六进制)124q84(十进制)或54(十六进制)2020年2月26日DSP技术及应用6第4章TMS320C54x的软件开发6553565535(十进制)或0FFFF(十六进制)-32768-32768(十进制)或8000(十六进制十进制整数十六进制整数0DH14(十进制)或000D(十六进制)12BCH4796(十进制)或12BC(十六进制)十六进制常数也可用C语言记号,即加前缀0x。0x0D14(十进制)或000D(十六进制)0x12BC4796(十进制)或12BC(十六进制)2020年2月26日DSP技术及应用7浮点整型常量由一串十进制数字组成,可以带小数点、小数部分和指数部分。2.浮点数常量浮点数的表示方法:[±][n].[n][E|e][±][n]n——为一串十进制数,浮点数前可带加减号(+或-),且小数点必须指定。例如:99.e9——有效的数;99e9——非法。合法:.314,3.14,-.314e-19。第4章TMS320C54x的软件开发2020年2月26日DSP技术及应用8第4章TMS320C54x的软件开发字符常数是包括在单引号内的字符串。若单引号之间没有字符,则值为0。每个字符在内部表示为8位ASCII码。3.字符常数例如:‘a’内部表示为61h‘B’内部表示为42h2020年2月26日DSP技术及应用9第4章TMS320C54x的软件开发用.set伪指令给一个符号赋值,则这个符号等于一个常量。4.汇编时常量例如:shift.set3;将常数值3赋给符号shiftLD#shift,A;再将3赋给A累加器2020年2月26日DSP技术及应用10字符串是由双引号括起来的一串字符,最大长度是可以变化的,由要求字符串的伪指令来设置。字符在内部用8位ASCII码来表示。4.2.3汇编语言程序中的字符串例如:“example”定义了一个长度为7的字符串:example第4章TMS320C54x的软件开发2020年2月26日DSP技术及应用11符号可用于标号、常量和替代其他字符。4.2.4汇编语言程序中的符号第4章TMS320C54x的软件开发2020年2月26日DSP技术及应用124.2.5汇编源程序中的表达式第4章TMS320C54x的软件开发序号符号运算操作求值顺序1+-~!取正、取负、按位求补、逻辑负从右至左2*/%乘法、除法、求模从左至右3+-加法、减法从左至右4^指数从左到右5左移、右移从左至右6=小于、小于等于从左至右7=大于、大于等于从左至右8!==不等于、等于从左至右9&按位与运算从左至右10∧按位异或运算从左至右11|按位或运算从左至右2020年2月26日DSP技术及应用13第4章TMS320C54x的软件开发4.3.1汇编伪指令汇编器伪指令是汇编语言程序的一个重要内容。用于为程序提供数据,并控制汇编程序如何汇编源程序。4.3汇编伪指令和宏指令2020年2月26日DSP技术及应用14第4章TMS320C54x的软件开发指令区以“.”号开始且为小写的均为汇编伪指令。C54x汇编器共有64条汇编伪指令,根据他们的功能,可以将汇编伪指令分成8类:2020年2月26日DSP技术及应用15第4章TMS320C54x的软件开发1.段定义伪指令把汇编语言程序的各部分划分在适当的段中。助记符及语法格式说明.bss为未初始化的变量保留空间。.data通常包含初始化的数据。.sect已初始化的自定义段,将紧接着的代码或数据存入该段。.text通常包含可执行的代码。.usect在一个未初始化的自定义段中为变量保留空间。2020年2月26日DSP技术及应用16第4章TMS320C54x的软件开发【例】段伪指令的使用。1************************************2*开始汇编到.text段*3************************************4000000.text50000000001.word1,2000001000260000020003.word3,4000003000471.段定义伪指令;定义文本段;初始化值为1,2;初始化值为3,42020年2月26日DSP技术及应用17第4章TMS320C54x的软件开发8************************************9*开始汇编到.data段*10************************************11000000.data120000000009.word9,10000001000A13000002000B.word11,12000003000C14;定义数据段;初始化值为9,10;初始化值为11,122020年2月26日DSP技术及应用18第4章TMS320C54x的软件开发15************************************16*开始汇编到命名的初始化段*17*var_defs*18************************************19000000.sect“var_defs”200000000011.word17,18000001001221;定义命名段;初始化值为17,182020年2月26日DSP技术及应用19第4章TMS320C54x的软件开发22************************************23*再继续汇编到.data段*24************************************25000004.data26000004000D.word13,14000005000E27000000.bsssym,1928000006000F.word15,16000007001029;继续汇编数据段;初始化值为13,14;定义未初始化段,保留19个空间;仍然在.data段中;初始化值为15,162020年2月26日DSP技术及应用20第4章TMS320C54x的软件开发30************************************31*再继续汇编到.text段*32************************************33000004.text340000040005.word5,6000005000635000000usym.usect“xy”,20360000060007.word7,80000070008;继续汇编文本段;初始化值为5,6;定义xy段,保留20个空间;仍然在.text段中;初始化值为7,82020年2月26日DSP技术及应用21第4章TMS320C54x的软件开发.text初始化值为1,2,3,4,5,6,7,8的字;.data初始化值为9,10,11,12,13,14,15,16的字;var_defs初始化值为17,18的字;.bss保留19个字的空间;.usect保留20个字的空间。2020年2月26日DSP技术及应用22第4章TMS320C54x的软件开发2.常数初始化伪指令用于为当前的段汇编常数值。助记符及语法格式说明.bytevalue[,…,value]初始化当前段里的一个或多个连续字。每个值的宽度被限制为8位。即把8位的值放入当前段的连续字。.charvalue[,…,value]初始化当前段里的一个或多个连续字。每个值的宽度被限制为8位。即把8位的值放入当前段的连续字。.fieldvalue[,sizeinbits]初始化一个可变长度的域。将单个值放入当前字的指定位域中。.floatvalue[,…,value]初始化一个或多个IEEE的单精度(32位)浮点数,即计算浮点数的单精度(32位)IEEE浮点数。.xfloatvalue[,…,value]初始化一个或多个IEEE的单精度(32位)浮点数,即计算浮点数的单精度(32位)IEEE浮点表示,并将它保存在当前段的两个连续的字中。不自动对准最接近的长字边界。2020年2月26日DSP技术及应用23第4章TMS320C54x的软件开发2.常数初始化伪指令助记符及语法格式说明.intvalue[,…,value]初始化一个或多个16位整数,无符号数。即把16位的值放到当前段的连续的字中。.shortvalue[,…,value]初始化一个或多个16位整数。即把16位的值放到当前段的连续的字中。.wordvalue[,…,value]初始化一个或多个16位整数,有符号数。即把16位的值放到当前段的连续的字中。.doublevalue[,…,value]初始化一个或多个双精度(64位)浮点数。即计算浮点数的单精度(32位)浮点表示,并将它存储在当前段的2个连续的字中。该伪指令自动对准长字边界。.longvalue[,…,value]初始化一个或多个32位整数。即把32位的值放到当前段的2个连续的字中。.string“string[,…,“string”]”初始化一个或多个字符串。把8位字符从一个或多个字符串放进当前段。2020年2月26日DSP技术及应用24第4章TMS320C54x的软件开发【例4.2】比较.byte,.int,.long,.xlong,.float,.xfloat,.word和.string伪指令。源程序:.byte0AAh,0BBh.word0CCCh.xlong0EEEEFFFh.long0EEEEFFFFh.int0DDDDh.xfloat1.99999.float1.99999.string“help”.byte:将一个或多个8位值放入当前段的连续字中。word1501500,100AA00BB.word:将一个或多个16位值放入当前段的连续字中。20CCC.xlong:将32位值放入当前段的2个连续的字中,先存最高有效位。3,40EEEEFFF.long:将32位值放入当前段的2个连续的字中,先存最高有效位。6,7EEEEFFFF.int:将一个或多个16位值放入当前段的连续的字中。8DDDD.xfloat:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。9,A3FFFFFAC.float:初始化单精度(32位)浮点数,并保存在当前段的两个连续的字中。C,D3FF
本文标题:第4章 TMSC320C54X的软件开发
链接地址:https://www.777doc.com/doc-4007768 .html