1、助记符指令一般用大写助记符指令一般用大写;汇编伪指令和宏指令,以汇编伪指令和宏指令,以“.”号开始,且为小写。号开始,且为小写。【例例4.1】汇编语言程序编写方法举例汇编语言程序编写方法举例 第4章 TMS320C54x的软件开发 .title “example.asm”;用双引号括起的源程序名 .mmregs ;定义存储器映射寄存器的替代符号 STACK.usect “STACK”,10H ;在数据存储器中留出16个单元作为 ;堆栈区,名为STACK .bss a,4 .bss x,4 ;在数据存储器中空出4个存储单元存放 ;变量x1,x2,x3和x4.bss y,1.def start ;
2、在此模块中定义,可为别的模块引用 .data ;紧跟其后的是已初始化数据 table:.word 1,2,3,4 ;在程序存储器标号为table开始的8个单 .word 8,6,4,2 ;元存放初始化数据 第4章 TMS320C54x的软件开发.text ;紧跟其后的是汇编语言程序正文 start:STM#0,SWWSR ;adds no wait statesSTM#STACK+10H,SP ;set stack pointer STM#a,AR1 ;AR1 point to aRPT#7 ;move 8 valuesMVPD table,*AR1+;from program memory
3、into ;data memoryCALL SUM ;call SUM subroutineend:B end第4章 TMS320C54x的软件开发SUM:STM#a,AR3 ;The subroutine implementSTM#x,AR4 ;multiply accumulateRPTZ A,#3MAC *AR3+,*AR4+,ASTL A,yRET.end ;结束汇编,汇编器将忽略 ;此后的任何源 语句 第4章 TMS320C54x的软件开发4.2.2 汇编语言常量汇编语言常量 C54x汇编器支持汇编器支持7种类型的常量:种类型的常量:1.二进制整数二进制整数:最多由最多由16个二进制
4、数字组成,其后缀为个二进制数字组成,其后缀为B(或或b).2.八进制整数八进制整数:最多由最多由6个八进制数字组成,其后缀为个八进制数字组成,其后缀为Q(或或q)。3.十进制整数十进制整数:由十进制数字串组成由十进制数字串组成4.范围从范围从3276832767或或065535 4.十六进制整数十六进制整数:5.最多由最多由4个十六进制数字组成,包括个十六进制数字组成,包括09和字符和字符AF及及af;6.必须由十进制值必须由十进制值09开始开始;7.其后缀为其后缀为H(或或h),也可以由前缀也可以由前缀(0 x)标明。标明。8.如如:78h、0Fh、37Ach、0 x37AC 第4章 TMS
5、320C54x的软件开发5.浮点数常量浮点数常量:由整数、小数点、小数部分和指数部分组成由整数、小数点、小数部分和指数部分组成 +(-)nnn.nnnE(e)+(-)nnn 整数整数 小数小数 指数指数 有效的浮点数常量有效的浮点数常量:3.0、3.14、-0.314e13、+314.59e-26.字符常量字符常量:由单引号括住的一个或两个字符组成。它在机器内由单引号括住的一个或两个字符组成。它在机器内部由部由8位位ASCII码来表示一个字符。码来表示一个字符。有效的字符常量:a(内部表示为内部表示为61h),为为D(内部表示为内部表示为2744h)7.汇编时常量汇编时常量:用用.set伪指令
6、给一个符号赋值。伪指令给一个符号赋值。例如:shift .set 3 ;将常数值将常数值3赋给符号赋给符号shift LD#shift,A ;再将再将3赋给赋给A累加器累加器 汇编器在内部把常量作为汇编器在内部把常量作为32位量。常量不能进行符号扩展。位量。第4章 TMS320C54x的软件开发4.2.3 汇编源程序中的字符串汇编源程序中的字符串 字符串(character strings)是包括在双引号内的一串字符。字符串的最大长度是变化的,由要求字符串的伪指令所规定。每个字符在内部用8位ASCII码表示。以下是字符串的例子:“sample program”定义了一个长度为14的字符串:sa
7、mple progran;“PLAN“C”定义了一个长度为7的字符串:PLAN“C”。第4章 TMS320C54x的软件开发4.2.4 汇编源程序中的符号汇编源程序中的符号 符号可用于标号、常量和替代其他字符。符号名最多可为32位字符数字串(AZ、az、09、_和$),第一位不能是数字,字符间不能有空格;符号对大小写敏感,如汇编器将ABC、Abc、abc认作不同的符号,用-c选项可以使汇编器不区分大小写;符号只有在汇编程序中定义后才有效,除非使用.global伪指令声明才是一个外部符号。DSP内部的寄存器名和$等都是汇编器已预先定义的全局符号。第4章 TMS320C54x的软件开发4.2.5
8、汇编源程序中的表达式汇编源程序中的表达式 表达式是由运算符隔开的常量、符号或常量和符号序列。表达式是由运算符隔开的常量、符号或常量和符号序列。表达式值的有效范围从表达式值的有效范围从3276832767。1.表达式运算符及优先级表达式运算符及优先级:表:表4-12.表达式溢出表达式溢出 当算术运算在汇编中被执行时,汇编器将检查溢出状态。当算术运算在汇编中被执行时,汇编器将检查溢出状态。但在作乘法时,不检查溢出状态。3.表达式的合法性表达式的合法性 由于符号的属性不同由于符号的属性不同(定义不同定义不同)使表达式存在合法性问题。使表达式存在合法性问题。符号的属性分为符号的属性分为3种:外部的、可
9、重定位的和绝对的。种:含有乘、除法的表达式中只能使用绝对符号。第4章 TMS320C54x的软件开发4.3 汇编伪指令和宏指令汇编伪指令和宏指令4.3.1 汇编伪指令汇编伪指令(又称为汇编命令又称为汇编命令)作用:作用:给程序提供数据并且控制汇编过程。表示:指令区以指令区以“.”号开始且为小写的为汇编伪指令。号开始且为小写的为汇编伪指令。指令数目:C54x汇编器共有汇编器共有64条条汇编伪指令。汇编伪指令。汇编伪指令用以形成常数和变量,当用它控制汇编和链接汇编伪指令用以形成常数和变量,当用它控制汇编和链接过程时,可以不占存储空间。过程时,可以不占存储空间。第4章 TMS320C54x的软件开发
10、汇编伪指令分成汇编伪指令分成8类类(根据功能根据功能):1.对各种段进行定义的伪指令;对各种段进行定义的伪指令;2.对常数对常数(数据和存储器数据和存储器)进行初始化的伪指令;进行初始化的伪指令;3.调整调整SPC(段寄存器段寄存器)的指令;的指令;4.输出列表文件格式伪指令;输出列表文件格式伪指令;5.引用其他文件的伪指令;引用其他文件的伪指令;6.控制条件汇编的伪指令;控制条件汇编的伪指令;7.在汇编时定义符号的伪指令;在汇编时定义符号的伪指令;8.执行其他功能的伪指令。执行其他功能的伪指令。第4章 TMS320C54x的软件开发1.段定义伪指令(段定义伪指令(5条)条)作用:把汇编语言程
11、序的各个部分划分在适当的段中。.bss 为未初始化的变量保留空间;为未初始化的变量保留空间;.data 通常包含了初始化的数据;通常包含了初始化的数据;.sect 定义已初始化的带命名段,其后的数据存入定义已初始化的带命名段,其后的数据存入该段;该段;.text 该段包含了可执行的代码;该段包含了可执行的代码;.usect 在一个未初始化的有命名的段中为变量保留在一个未初始化的有命名的段中为变量保留空间。空间。段是通过叠加方式来建立的。例如在汇编器第一次遇到.data伪指令时,data指令后面的语句都被汇编在.data段中(直到汇编器遇到.text和.sect伪指令为止)。如果后来又在其他的段
12、中遇到.data指令,其后的语句继续加到.data段中。这样虽然程序中是多个.data段分散在各处,但汇编器只创建一个.data段,它可以连续地被分配到内存中。第4章 TMS320C54x的软件开发2.常数初始化伪指令(共有常数初始化伪指令(共有24条)条).int和和.word 把一个或多个把一个或多个16位数存放到当前段的连续字位数存放到当前段的连续字中。中。.int为无符号整型量,为无符号整型量,.word为带符号整型量。为带符号整型量。.byte 把一个或多个把一个或多个8位的值放入当前段的连续字中。该指令位的值放入当前段的连续字中。该指令类似于类似于.word,不同之处在于,不同之处在于.word中的每个值的宽度限制为中的每个值的宽度限制为16位。位。.float和和.xfloat 计算以计算以IEEE格式表示的单精度格式表示的单精度(32位位)浮点浮点数,并存放在当前段的连续字中,高位先存。数,并存放在当前段的连续字中,高位先存。.float能自动按域能自动按域的边界排列,的边界排列,.xfloat不能。不能。.long和和.xlong 把把32位数存放到当前段连续的两个字中,高位数存放到当前段连续的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1