DSP常用汇编语言指令简介
- 格式:pdf
- 大小:1.03 MB
- 文档页数:5


1附录6 TMS320C54x 指令系统一览表(按指令功能排列) 2一、算术运算指令31. 加法指令42. 减法指令53. 乘法指令64. 乘法累加/减指令75. 双精度(32位操作数)指令86. 专用指令二、逻辑运算指令91. 与逻辑运算指令102. 或逻辑运算指令113. 异或逻辑运算指令124. 移位指令13145. 测试指令三、程序控制指令 15 1. 分支转换指令162. 调用指令173. 中断指令184. 返回指令 195. 重复指令 20216. 堆栈管理指令227. 其他程序控制指令23注:?条件“真”,§条件“假”,※延迟指令。
24四、加载和存储指令1. 加载指令25262. 存储指令273. 条件存储指令4. 并行加载和存储指令285. 并行加载和乘法指令29306. 并行存储和加 / 减法指令7. 并行存储和乘法指令318. 其他加载和存储指令3233五.伪指令341.定义段的伪指令352.初始化常数(数据和存储器)的伪指令363.调整段程序计数器伪指令(SPC)37.align 把SPC调整到页边界38.even 把SPC调整到偶数字边界394.控制输出列表格式化伪指令405.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇4142编,.break结构是可选项43.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif4445条件为真,汇编代码块.else结构是可选项46.endif 结束.if代码块47.endloop 结束.1oop代码块48.if well-defined expression 如果条件为真则汇编代码块49.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号5051.asg [”] character string [”],substitution symbol——把52字符串赋予替代的符号.53.endstruct 结束结构定义54.equ 使值和符号相等55.eval well-defined expression,substitution symbol 根据数字56替代符号完成运算57.newblock 取消局部标号.set 使数值和符号相等5859.struct 开始结构定义60.tag 把结构属性赋予标号617.宏指令62宏定义:Macname .macro[参数1],[…],[参数n]63宏调用:[标号][:] macname [参数1],[…],[参数n]648.编译软件指令65①汇编器:66asm500.exe67asm500 [input file[object file [listing file] [-options]] 68-c—使汇编语言文件中大小没有区别。
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表2);辅助寄存器和数据页指针指令(表3);TREG、PREG和乘法指令(表4);转移指令(表5);控制指令(表6);I/O和存储器操作(表7)。
在每张表中,指令按字母顺序排列。
执行每条指令所需要的周期数在表中给出,所有指令都假设从内部程序存储器和内部数据存储器中执行,指令的周期数适用于单指令执行,不适用于重复方式。
编程时,用户必须对每条指令的寻址方式了解清楚,因此这里也在表中给出了每条指令的寻址方式。
由于指令的操作码对用户编程没有多大指导意义,在这里就没有列出来。
为了参照起见,我们先定义这六张概述表的符号意义:ACC 累加器。
ARBITXCM 辅助寄存器。
4位数值,用于指定数据存储器数值中的哪一位将被BIT指令所测试。
2位数值,CMPR指令执行CM值所声明的比较:若CM=00,测试当前AR=AR0否;若CM=01,测试当前AR<AR0否;若CM=10,测试当前AR>AR0否;若CM=11,测试当前AR≠AR0否。
ShiftTP 4位右移量。
用于条件执行指令的2位数值,代表如下4种条件:若BIO引脚为低,TP=00;若TC位=1,TP=01;若TC位=0,TP=10;无条件TP=11。
ARX 用于LAR和SAR指令的3位数据值,指定被操作的辅助寄存器。
52表2 累加器、算数和逻辑指令 ABS周期|(ACC)|→ACC 1(ACC)+(数据存储器地址)×12shift→ACC(ACC)+(数据存储器地址)×216→ACC 1(ACC)+k→ACC 1shift(ACC)+lk×2→ACC 2指令功能(ACC)+(数据存储器地址)+(C)→ACC寻址方式直接/间接直接/间接短立即数长立即数指令说明ACC取绝对值移位时低位填0,若SXM=1,高位用符号扩展;若SXM=0,高位填0;结果存在ACC中,该指令使C=0。
1.DSP汇编语言程序的编写(1)汇编语言源程序以.asm为其扩展名。
(2)汇编语言源程序的每一行都可以由4个部分组成,句法如下:[标号] [:] 助记符[操作数] [;注释]其中可用空格或TAB键隔开标号——供本程序的其他部分或其他程序调用。
标号是任选项,标号后面可以加也可以不加冒号“:”。
标号必须从第一列写起,标号最多可达到32个字符(A~Z ,a~z ,0~9 ,_ ,以及$),但第1个字符不能以数字开头。
引用标号时,标号的大小写必须一致。
标号的值就是SPC(段程序计数器)的值。
如果不用标号,则第一个字符必须为空格、分号或星号(*)。
助记符——助记符指令、汇编指令、宏指令和宏调用。
作为助记符指令,一般用大写;汇编命令和宏指令,以英文句号“.”开始,且为小写。
汇编命令可以形成常数和变量,当用它控制汇编和连接过程时,可以不占用存储空间。
指令和汇编命令都不能写在第1列。
操作数——指令中的操作数或汇编命令中定义的内容。
操作数之间必须用逗号“,”分开。
有的指令操作无操作数,如NOP、RESET。
注释——注释从分号“;”开始,可以放在指令或汇编命令的后面,也可以放在单独的一行或数行。
注释是任选项。
如果注释从第1列开始,也可以用“*”表示注释。
(3)常用的汇编命令如表所示。
(4)汇编语言程序中的数据形式如表所示2.程序2.1 程序一编程目的:了解DSP的输入和输出方法程序功能:求乘积之和y=a1*x1+a2*x2+a3*x3+a4*x4.title "mpy_add.asm".mmregs ;将存储映像寄存器导入列表STACK .usect "STACK",10h ;给堆栈段分配空间.bss a,4 ;将9个字空间分配给各个变量.bss x,4.bss y,1PA0 .set 0 ;将端口PA0全部置0.def start ;定义标号start.data ;定义数据代码段table: .word 4,4,4,4.word 4,4,4,4.text ;定义文本代码段start: STM #0,SWWSR ;将等待寄存器设为0,表示不等待STM #STACK+10h,SP ;设堆栈指针STM #a,AR1 ;将AR1指向变量a的地址RPT #7 ;从程序存储空间转移7+1个值到数据储存空间MVPD table,*AR1+CALL SUM ;调用SUM子程序end: B end ;循环等待SUM: STM #a,AR3 ;将AR3指向变量a的地址STM #x,AR4 ;将AR4指向变量x的地址RPTZ A,#3 ;将A清0,并重复执行下一条指令3+1次MAC *AR3+,*AR4+,ASTL A,@y ;将寄存器A中的低16位存入y地址空间PORTW @y,PA0 ;将y地址中的值输出到输出口RET ;子程序返回.end ;程序结束等待位的设置:C54x片内有一部件——软件可编程等待状态发生器,控制着外部总线的工作。