第04.1章 C54xDSP汇编语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二进制整型常数(如011B或011b) 八进制整型常数(如10Q或10q或010) 十进制整型常数(如23) 十六进制整型常数(如78H或78h) 浮点常数(如-3.1e-5) 字符常数(如‘A‟或‘b‟) 字符串(如“sample program”) 汇编-时间常数(如SYM1 .set 2)
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=A+#1
5
; 符号XN赋值为5 ; 将5装入AR0中 ; A+1赋给B
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
代数指令语法格式:
[标号区][:]
指令
[;注释区]
;符号SYM1=2 ;将2装入AR1 ;初始化字( 016H )
代数指令举例: SYM1 .set 2 start: AR1= #SYM1 .word 016H
汇编语言中的常数与字符串
汇编器支持8种类型常数,每个常数在汇编器内部都使用
32位保存,常数不作符号扩展。
例:$n定义的局部标号 $1 LD ADDRA, A ; $1:将ADDRA装入累加器A .newblock ;取消$1的定义,使之可被再次使用 BC $1, ALT ; $1 NOP 例:name?定义的局部标号 mylab? NOP ;局部标号‘mylab‟的定义 B mylab? ;分支转移到mylab
汇编源程序中的表达式
可以是常数、符号,或用算数运算符连结起来的常数和符 号。 有效范围:-32768~32767(16位带符号二进制数的范围) 影响表达式计算顺序的3个因素:
• 圆括号 • 运算符优先级(同C语言运算符优先级)
• 从左到右计算
1.运算符
TMS320C54x汇编器使用与C语言相似的优先级
助记符指令区
1.
助记符区 机器指令助记符,一般大写 汇编伪指令和宏命令,以“.”开始且为小写
* 一定不能从第一列开始,否则被认为是语句标号
操作数区 操作数可以是常数、符号或表达式 和指令之间用一个或多个空格分开 操作数之间用逗号分开 操作数前缀规定:#后操作数为立即数,*后操作数为间 接地址。 例如:Label: ADD #99, B Label: LD *AR3, B
表4-4-2 或逻辑运算指令
逻辑运算指令
表4-4-3 异或逻辑运算指令
逻辑运算指令
表4-4-4 移位逻辑运算指令
逻辑运算指令
表4-4-5 测试指令
程序控制指令
分支转移指令
子程序调用指令
中断指令
返回指令
重复指令 堆栈处理指令 混合程序控制指令
程序控制指令
表4-5-1 分支转移指令
6、字符常数 字符常数是包括在单引号内的,由1或2个字符组成字符 串。每个字符在内部表示为8位ASCII码。 字符常量与字符串的差别:字符常量代表单个整数值
例:‘a‟内部表示为61H „C‟内部表示为43H „„'‟A‟内部表示为2741H „ ‟内部表示00H 7、字符串 字符串是用双引号括起来的一串字符。 例:“example” 定义了一个长度为7的字符串example
算数运算指令
逻辑运算指令
程序控制指令
装载和存储(数据传送)指令
算术运算指令
加法指令
减法指令
乘法指令
乘累加指令
乘减指令
双字/双精度指令
特殊操作指令
算术运算指令
表4-3-1 加法指令
算术运算指令
表4-3-2
减法指令
算术运算指令
表4-3-3 减法指令(续)
算术运算指令
表4-3-4 乘法指令
可用符号代替和它等同的值。
• -d选项的格式如下:asm500 –d name =[value] name是所要定义的符号名。 value为要赋给符号的值。若value省略,则符号值为1。 4、预先定义的符号常数 (1)$,代表段程序指针(SPC)的当前值;
(2)寄存器符号:AR0~AR7;
(3)存储器映射寄存器由汇编器设置为符号, _large_model指定存储器模式。
主要内容
汇编语言程序的编写方法 汇编指令 寻址方式 公共目标文件格式 汇编语言程序设计 混合编程
TMS320C54x的汇编指令系统
4.1 指令系统中的指令集符号和缩写
4.2 指令系统
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续1)
汇编语言中的常数与字符串
汇编源程序中的符号 汇编源程序中的表达式
汇编程序语法
TMS320C54x的汇编源程序包含:
汇编语言指令(assembly language instructions) 汇编伪指令(assembler directives) 宏伪指令(macro directives) 注释(comments)。
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续2)
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续3)
指令系统中的符号和缩写
表4-2 指令系统中的符号和缩写(续4)
汇编指令介绍
TMS320C54x的指令系统共有129条基本指令,由 于操作数的寻址方式不同,又可派生至205条指 令。按功能分为如下几类:
例: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 (十进制)
汇编语句书写规则
所有语句必须以标号、空格、*号或 ;号开头。
标号是可选项,如需使用,则必须在第一列。 各区之间用一个或多个空格分开,Tab等效于空格。 注释是可选项。注释可以从第一列的 * 号或 ;号 开头;如果从其他列开始,就必须用 ;号开头。
源程序需分行写要用\结束前一行,余下部分在下 一行继续。
label, B label1 ;分支转移到label1
2、符号常数 伪指令.set和.struct/.tag/.endstruct可以用来将常数值赋给 符号名。注意:符号常数不能被重新定义。
例: N .set 14 ;定义常数 item .struct ; item结构定义
3、定义符号常数(-d选项) • -d选项将常数值与符号等同。定义后,在汇编源文件中
汇编语言源文件格式
助记符指令语法格式
[label][:]
mnemonic [operand list] [;comment] [操作数区] [;注释区]
[标号区][:] 助记符区
代数指令语法格式 指令 [;注释区]
[标号区][:]
*助记符(指令)一定不能从第一列开始,否则视为标号。 *汇编器只识别每行前200个字符,超过则截断并发出警告。
加载和存储指令
表4-6-5 并行加载和乘法指令
加载和存储指令
表4-6-6 并行存储和加/减法指令
加载和存储指令
表4-6-7 并行存储和乘法指令
语句标号区
必须从第一列开始
可以长达32个字符 由A~Z、a~z、0~9、_或$组成,不能以数字开头 对大小写敏感 后可跟(:),冒号不作为标号名的一部分 若无标号,语句的第一列必须是空格、星号或分号 使用标号时,标号值为段程序计数器SPC的当前值 标号独占一行,将指向下一行指令,值为下一条指令的 SPC的值
表4-1 可以用在表达式中的运算符
2.条件表达式
汇编器支持关系运算符,可用于任何表达式
常用的关系运算符有:
= 赋值; == 等于; != 不等于;
﹥= 大于或等于;﹤=小于或等于;﹥大于;﹤小于
3.表达式的溢出
汇编器会在执行算数操作后,检查上溢和下溢的条件
一旦发现溢出,就发出结果将被截断的警告 汇编器不检查乘法的溢出状态
2.
注释区
注释开始在第一列,必须用“;”或“*”开头 注释开始在其他列,只能用“;”开头 允许源语句中仅有注释
助记符指令语法格式:
[标号区][:]
助记符
[操作数] [;注释区]
;符号SYM1=2 ;将2装入AR1 ;初始化字( 016H ) ;返回
助记符指令举例: SYM1 .set 2 start: LD # SYM1,AR1 .word 016H RET
算术运算指令
表4-3-5 乘加和乘减指令
算术运算指令
表4-3-5 乘加和乘减指令(续)
算术运算指令
表4-3-6 双精度(32位操作数)指令
算术运算指令
表4-3-7 专用指令
逻辑运算指令
与指令
或指令
异或指令
移位Biblioteka Baidu令
测试指令
逻辑运算指令
表4-4-1 与逻辑运算指令
逻辑运算指令
7、汇编-时间常数 • 使用.set伪指令给某个符号赋一常数值,则该符号就成为 一个汇编-时间常数,等效于一个常数。 例:将常数18赋给符号nan_hua可采用如下指令: nan_hua .set 18 LD #nan_hua, A • 还可以使用.set伪指令将符号常数赋值给寄存器。在这种 情况下,符号变成寄存器的替代名。 例:将符号常数AuxR1赋给寄存器AR1。 AuxR1 .set AR1 MVMM AuxR1, SP
程序控制指令
表4-5-2 子程序调用指令
程序控制指令
表4-5-3 中断指令
程序控制指令
表4-5-4 返回指令
程序控制指令
表4-5-5 重复指令
程序控制指令
表4-5-6 堆栈操作指令
程序控制指令
表4-5-7 混合程序控制指令
装载和存储(数据传送)指令
加载指令是将存储器内容或立即数赋给目的寄存器; 存储指令是把源操作数或立即数存入存储器或寄存器。
自动化技术系 姜运芳
E-mail:jiangyf@fzxy.edu.cn
第四章 TMS320C54xDSP 汇编语言与混合编程
主要内容
汇编语言程序的编写方法 汇编指令 寻址方式 公共目标文件格式 汇编语言程序设计 混合编程
汇编语言程序的编写方法
汇编语言源程序格式
汇编源程序中的符号
• 符号用于标号、常数和替代字符 • 符号名可以是长达200个字符的字母、数字、$和下划线_ • 第一个字符不能是数字,符号中间不能有空格
• 符号分大小写(AB、Ab、ab 不同)
• 符号仅在定义它的汇编程序中有效,除非用.global伪指令将 它声明为全局符号
1、标号 用作标号(Label)的符号在程序中作为符号地址与所在 程序的位置有关。在同一个文件中局部使用的标号必须是 唯一的。 例: .global label1 NOP ADD B label ;定义label为全局符号
一般的装载和存储指令 条件存储指令 并行装载和存储指令 并行装载和乘法指令 并行存储和加、减法指令 并行存储和乘法指令 混合装载和存储指令
加载和存储指令
表4-6-1 加载指令
加载和存储指令
表4-6-2 存储指令
加载和存储指令
表4-5-3 条件存储指令
加载和存储指令
表4-6-4 并行加载和存储指令