第三章 DSP汇编指令..
- 格式:ppt
- 大小:1.85 MB
- 文档页数:62
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表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。
附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件“真”,§条件“假”,※延迟指令。
四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。
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片内有一部件——软件可编程等待状态发生器,控制着外部总线的工作。
汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表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。
第三章DSP开发工具T提供了软件集成开发调试及软件仿真平台CCS。
通过使用CCS,用户可以避免复杂的编译连接命令,方便的进行硬件仿真和软件仿真。
一、软件开发过程※二、汇编语言程序编写方法三、COFF的概念四、编译器链接命令文件软件开发过程大体要经过化等几个主要过程。
1)编辑:编辑源程序(.ASM或.C)和链接器命令文件(.CMD)。
源程序可以用汇编或C语言来设计,当然也可以进行混合编程。
2)编译: 将原程序编译成为公共目标格式文件(COFF 格式的.OBJ)、存储器映像文件(.MAP)和列表文件(.LST),对于C程序首先要由C编译器编译成为汇编程序,然后再生成OBJ文件。
3)链接成可执行代码:将用户的多个COFF文件连同所引用的库文件一起组合成为可执行代码。
4)调试:通过软仿真或硬件仿真方式对程序进行调试5)固化:将执行代码烧写进ROM中,实现脱机运行。
第三章DSP开发工具一、软件开发过程二、汇编语言程序编写方法※三、COFF的概念四、编译器链接命令文件1)文件扩展名为.ASM2)汇编语言源程序的句法:如START: STM #0,SWWSR ;SWWSR=0不插入等待时间[标号][:] 助记符[操作数] [;注释]标号:标号和冒号都是可选项,代表段程序计数器(SPC)的值。
所有标号必须从第一列开始写,最多可达32字符(A~Z,a~z,0~9 …_‟,…$‟),第一字母不能数字。
如果不用标号,则第一字母必须为空格、分号或星号。
助记符:可以是助记符指令、汇编指令、宏指令和宏调用。
助记符指令一般大写。
汇编命令和宏命令均以“.”开始,并且小写。
汇编命令可以定义常量和变量,用于控制汇编和链接过程,可以不占存储空间。
注意:汇编命令不能写在第一列。
操作数:指令中的操作数或汇编命令中定义的内容,操作数之间必须以逗号隔开,也有一些指令没有操作数。
如NOP。
注释:注释前必须加分号,一般用于标注指令的执行信息,使程序增加可读性。
第一章:1、数字信号处理的实现方法一般有哪几种?答:数字信号处理的实现是用硬件软件或软硬结合的方法来实现各种算法。
(1) 在通用的计算机上用软件实现;(2) 在通用计算机系统中加上专用的加速处理机实现;(3) 用通用的单片机实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制;(4)用通用的可编程 DSP 芯片实现。
与单片机相比,DSP 芯片具有更加适合于数字信号处理的软件和硬件资源,可用于复杂的数字信号处理算法;(5) 用专用的 DSP 芯片实现。
在一些特殊的场合,要求的信号处理速度极高,用通用 DSP 芯片很难实现( 6)用基于通用 dsp 核的asic 芯片实现。
2、简单的叙述一下 dsp 芯片的发展概况?答:第一阶段, DSP 的雏形阶段( 1980 年前后)。
代表产品: S2811。
主要用途:军事或航空航天部门。
第二阶段, DSP 的成熟阶段( 1990 年前后)。
代表产品: TI 公司的 TMS320C20主要用途:通信、计算机领域。
第三阶段, DSP 的完善阶段( 2000 年以后)。
代表产品:TI 公司的 TMS320C54 主要用途:各个行业领域。
3、可编程 dsp 芯片有哪些特点?答: 1、采用哈佛结构( 1)冯。
诺依曼结构,( 2)哈佛结构( 3)改进型哈佛结构2、采用多总线结构 3.采用流水线技术4、配有专用的硬件乘法-累加器5、具有特殊的 dsp 指令6、快速的指令周期7、硬件配置强8、支持多处理器结构9、省电管理和低功耗4、什么是哈佛结构和冯。
诺依曼结构?它们有什么区别?答:哈佛结构:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。
冯。
诺依曼结构:该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。
DSP复习要点第一章绪论1、数的定标:Qn表示。
例如:16进制数2000H=8192,用Q0表示16进制数2000H=0.25,用Q15表示2、‟C54x小数的表示方法:采用2的补码小数;.word 32768 *707/10003、定点算术运算:乘法:解决冗余符号位的办法是在程序中设定状态寄存器STl中的FRCT位为1,让相乘的结果自动左移1位。
第二章CPU结构和存储器设置一、思考题:1、C54x DSP的总线结构有哪些特点?答:TMS320C54x的结构是围绕8组16bit总线建立的。
(1)、一组程序总线(PB):传送从程序存储器的指令代码和立即数。
(2)、三组数据总线(CB,DB和EB):连接各种元器件,(3)、四组地址总线(PAB,CAB,DAB和EAB)传送执行指令所需要的地址。
2、C54x DSP的CPU包括哪些单元?答:'C54X 芯片的CPU包括:(1)、40bit的算术逻辑单元(2)、累加器A和B(3)、桶形移位寄存器(4)、乘法器/加法器单元(5)、比较选择和存储单元(6)、指数编码器(7)、CPU状态和控制寄存器(8)、寻址单元。
1)、累加器A和B分为三部分:保护位、高位字、地位字。
保护位保存多余高位,防止溢出。
2)、桶形移位寄存器:将输入数据进行0~31bits的左移(正值)和0~15bits的右移(负值)3)、乘法器/加法器单元:能够在一个周期内完成一次17*17bit的乘法和一次40位的加法4)、比较选择和存储单元:用维比特算法设计的进行加法/比较/选择运算。
5)、CPU状态和控制寄存器:状态寄存器ST0和ST1,由置位指令SSBX和复位指令RSBX控制、处理器模式状态寄存器PMST2-3、简述’C54x DSP的ST1,ST0,PMST的主要功能。
答:’C54x DSP的ST1,ST0,PMST的主要功能是用于设置和查看CPU的工作状态。
•ST0主要反映处理器的寻址要求和计算机的运行状态。
dsp中的汇编伪指令伪指令分类伪指令及其表示格式具体描述段定义伪指令 .asect “段名” , 地址汇编到一以绝对地址为起始的段中.bss 符号,字数[,块标号] 在未初始化数据段bss中保留空间.data 汇编到已初始化数据段data中.sect “段名”汇编到一已命名(已初始化)的段中.text 汇编到可执行代码段text中符号 .usect “段名”,字数[,块标号] 在一已命名(未初始化)的段中保留空间常数初始化伪指令(包括数据和地址常数) .bes 位数在当前段中保留位数(标号指向所保留空间的尾部).bfloat 数值初始化一个32位,IEEE单精度的浮点常数;禁止有跨页的初始化对象。
.blong 数值1[,…,数值n] 初始化一个或多个32位整数;禁止有跨页的初始化对象。
.byte 数值1[,…,数值n] 初始化当前段中一个或多个连续字节.field 数值1[,…,数值n] 初始化一个可变长度的字段.float 数值初始化一个32位,IEEE单精度的浮点常数.int 数值1[,…,数值n] 初始化一个或多个16位整数.long 数值1[,…,数值n] 初始化一个或多个32位整数.space 位数在当前段中保留位数(标号指向所保留空间的头部).string “字符串1”[,…,“字符串n”] 初始化一个或多个文本字符串.word 数值1[,…,数值n] 初始化一个或多个16位整数对准段程序计数器的伪指令 .align 在一页的边缘对准SPC(段程序计数器).even 在一偶数的边缘对准SPC定义输出列表格式的伪指令 .drlist 使所有伪指令行都被列出(缺省方式).drnolist 禁止某些伪指令行的列出.fclist 允许列出错误的条件代码块(缺省方式).fcnolist 禁止列出错误的条件代码块.length 页的长度定义源文件列表的页长.list 从头开始源文件的列表.mlist 允许宏列表和循环块(缺省方式).mnolist 禁止宏列表和循环块定义输出列表格式的伪指令 .nolist 停止源文件列表.option{B/D/F/L/M/T/X} 选择输出列表文件的参数.page 在源文件列表中生成一页.sslist 允许扩展子程序符号列表.ssnolist 禁止扩展子程序符号列表(缺省方式).tab 大小设置表的大小.title “字符串”在列表页头显示一个标题.width 页宽设置源文件列表的页宽外部文件定位的指伪令 .copy [“]文件名[”] 包含其他文件中的源语句.def 符号1[,…,符号n] 标明一个或多个在当前模块中定义而在其他模块中要用到的符号.global 符号1[,…,符号n] 标明一个或多个全局(外部)符号.include [“]文件名[”] 包含其他文件中的源语句.mlib [“]文件名[”] 定义宏定义库.ref符号1[,…,符号n] 标明一个或多个在另一模块中定义而在当前模块中要用到的符号条件汇编伪指令.break [确切定义的表达式] 如果条件满足,就结束.loop汇编。
DSP汇编指令引言DSP是指数字信号处理器,是一种专门用于数字信号处理的微处理器。
DSP汇编指令是在DSP芯片上执行操作的命令。
这篇文档将常见的DSP汇编指令及其使用方法。
通用指令MOVMOV是Move的缩写,指将数据从一个寄存器移动到另一个寄存器或内存地址中。
它有很多不同的格式,例如:MOV R1, #0 ; 将0存储在R1寄存器中MOV R2, R1 ; 将R1寄存器中的值复制到R2寄存器中MOV @R3, R2 ; 将R2寄存器中的值存储在R3指向的内存地址中ADD和SUBADD和SUB分别表示加法和减法运算。
它们也有不同的格式,例如:ADD R1, R2 ; 将R2寄存器中的值加到R1寄存器中ADD R1, #2 ; 将2加到R1寄存器中SUB R1, R2 ; 将R2寄存器中的值从R1寄存器中减去AND和ORAND和OR分别表示按位与和按位或运算。
它们也有不同的格式,例如:AND R1, R2 ; 将R1寄存器和R2寄存器中的值按位与后存储在R1寄存器中OR R1, R2 ; 将R1寄存器和R2寄存器中的值按位或后存储在R1寄存器中CMPCMP是Compare的缩写,用于比较两个值。
它会将两个操作数相减,并设置相关的标志位。
它的格式如下:CMP R1, R2 ; 比较R1和R2寄存器中的值跳转指令JMPJMP是Jump的缩写,用于无条件跳转到目标地址。
它的格式如下:JMP label ; 跳转到标签为label的位置JNZ和JZJNZ和JZ分别表示如果结果不为零则跳转和如果结果为零则跳转。
它们的格式如下:JNZ label ; 如果前一条CMP指令比较结果不为零,则跳转到标签为label的位置JZ label ; 如果前一条CMP指令比较结果为零,则跳转到标签为label的位置JGE和JLEJGE和JLE分别表示如果大于或等于则跳转和如果小于或等于则跳转。
它们的格式如下:JGE label ; 如果前一条CMP指令比较结果大于或等于,则跳转到标签为label的位置JLE label ; 如果前一条CMP指令比较结果小于或等于,则跳转到标签为label的位置循环指令DJNZDJNZ是Decrement and Jump if Not Zero的缩写,表示如果操作数不为零则减1并跳转到目标地址。
D S P指令一览表
集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-
D S P指令一览表附录6TMS320C54x指令系统一览表(按指令功能排列)
一、算术运算指令
1.加法指令
2.减法指令
3.乘法指令
4.乘法累加/减指令
5.双精度(32位操作数)指令
6.专用指令
二、逻辑运算指令
1.与逻辑运算指令
2.或逻辑运算指令
3.异或逻辑运算指令
4.移位指令
5.测试指令
三、程序控制指令
1.分支转换指令
2.调用指令
注:条件“真”,§条件“假”,※延迟指令。
3.中断指令
4.返回指令
注:条件“真”,§条件“假”,※延迟指令。
5.重复指令
注:条件“真”,§条件“假”,※延迟指令。
6.堆栈管理指令
7.其他程序控制指令
注:条件“真”,§条件“假”,※延迟指令。
四、加载和存储指令
1.加载指令
2.存储指令
3.条件存储指令
4.并行加载和存储指令
5.并行加载和乘法指令
6.并行存储和加/减法指令
7.并行存储和乘法指令
8.其他加载和存储指令。
DSP汇编指令总结DSP汇编指令总结⼀、寻址⽅式:1、⽴即寻址:短⽴即寻址(单指令字)长⽴即数寻址(双指令字)第⼀指令字第⼆指令字16位常数=16384=4000h2、直接寻址ARU 辅助寄存器更新代码,决定当前辅助寄存器是否和如何进⾏增或减。
N规定是否改变ARP值,(N=0,不变)4.3.1、算术逻辑指令(28条)4.3.1.1、加法指令(4条);4.3.1.2、减法指令(5条);4.3.1.3、乘法指令(2条);4.3.1.4、乘加与乘减指令(6条);4.3.1.5、其它算数指令(3条);4.3.1.6、移位和循环移位指令(4条);4.3.1.7、逻辑运算指令(4条);4.3.2、寄存器操作指令(35条)4.3.2.1、累加器操作指令(6条)4.3.2.2、临时寄存器指令(5条)4.3.2.3、乘积寄存器指令(6条)4.3.2.4、辅助寄存器指令(5条)4.3.2.5、状态寄存器指令(9条)4.3.2.6、堆栈操作指令(4条)4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条)4.3.3.2、程序存储器读写指令(2条)4.3.3.3、I/O操作指令(2条)4.3.4、程序控制指令(15条)4.3.4.1、程序分⽀或调⽤指令(7条)4.3.4.2、中断指令(3条)4.3.4.3、返回指令(2条)4.3.4.4、其它控制指令(3条)4.3.1、算术逻辑指令(28条)4.3.1.1、加法指令(4条);▲ADD▲ADDC(带进位加法指令)▲ADDS(抑制符号扩展加法指令)▲ADDT(移位次数由TREG指定的加法指令)4.3.1.2、减法指令(5条);★SUB(带移位的减法指令)★SUBB(带借位的减法指令)★SUBC(条件减法指令)★SUBS(减法指令)★SUBT(带移位的减法指令,TREG决定移位次数)4.3.1.3、乘法指令(2条);★MPY(带符号乘法指令)★MPYU(⽆符号乘法指令)4.3.1.4、乘加与乘减指令(6条);★MAC(累加前次积并乘)(字数2,周期3)★MAC(累加前次积并乘)★MPYA(累加-乘指令)★MPYS(减-乘指令)★SQRA(累加平⽅值指令)★SQRS(累减并平⽅指令)4.3.1.5、其它算数指令(3条);★ABS(累加器取绝对值指令)★NEG(累加器取补码指令)★NORM(累加器规格化指令)返回4.3.1.6、移位和循环移位指令(4条);▲ SFL(累加器内容左移指令)▲ SFR(累加器内容右移指令)▲ROL(累加器内容循环左移指令)▲ROR(累加器内容循环右移指令)返回4.3.1.7、逻辑运算指令(4条);▲ AND(逻辑与指令)▲ OR(逻辑或指令)▲ XOR(逻辑异或指令)▲ CMPL(累加器取反指令)返回4.3.2、寄存器操作指令(35条)4.3.2.1、累加器操作指令(6条)▲ LACC(装载累加器指令)▲ LACT(装载累加器)*按TREG低4位指定的次数移位▲ LACL(装载累加器低16位指令)▲ ZALR(装载累加器指令)▲ SACL(移位并存储累加器低半部)▲ SACH(移位并存储累加器⾼半部)返回4.3.2.2、临时寄存器指令(5条)▲ LT(装载TREG指令)▲ LTA(装载TREG并累加上次乘积指令)▲ LTS (装载TREG并减去上次乘积指令)▲ LTD(装载TREG并累加上次乘积及数据移动指令)▲LTP(装载TREG和累加器指令)返回4.3.2.3、乘积寄存器指令(6条)▲ PAC (乘积寄存器内容载⼊累加器)▲ APAC (PREG与累加器相加)▲ SPAC(累加器和乘积寄存器相减)▲ LPH(装载PREG⾼16位指令)▲ SPL(存储PREG低16位指令)▲ SPH(存储PREG⾼16位指令)返回4.3.2.4、辅助寄存器指令(5条)★LAR(装载当前辅助寄存器AR)★SAR(存储辅助寄存器指令)★MAR(修改当前辅助寄存器)★SBRK(从当前辅助寄存器减去短⽴即数)返回4.3.2.5、状态寄存器指令(9条)★LST(装载状态寄存器)★SST(存储状态寄存器)★SETC(控制位置“1”指令)★SETC(控制位置“1”指令)★LDP(装载数据指针DP指令)★BIT(位测试指令)★BITT(测试由TREG指定bit code指令)★CMPR(⽐较当前辅助寄存器AR和AR0)返回4.3.2.6、堆栈操作指令(4条)★PUSH(累加器低16位进栈指令)★POP(栈顶内容弹出⾄累加器低16位指令)★POP(栈顶内容弹出⾄累加器低16位指令)★POPD(弹栈⾄数据存储器指令)返回4.3.3、存储器与I/O操作指令(8条)4.3.3.1、数据移动指令(4条)▲DMOV(数据存储器内部数据移动指令)▲SPLK(存储长⽴即数⾄数据存储器指令)▲BLDD(数据存储器内部的数据块移动)▲ BLPD(从程序存储器到数据存储器的数据块传送)4.3.3.2、程序存储器读写指令(2条)★TBLR(读程序存储器数据到数据存储器)★TBLW(写程序存储器)4.3.3.3、I/O操作指令(2条)★IN(数据输⼊指令)★OUT(数据输出指令)4.3.4、程序控制指令(15条)4.3.4.1、程序分⽀或调⽤指令(7条)★B(⽆条件转移指令)★BANZ(辅助寄存器内容不等于零转移)★CALL(⽆条件⼦程序调⽤指令)★BACC(按累加器内容转移指令)★CALA(由累加器指定地址的⼦程序调⽤指令)★CC(条件调⽤指令)4.3.4.2、中断指令(3条)★INTR(软中断指令)★TRAP(软件陷阱中断)★NMI(⾮屏蔽中断)4.3.4.3、返回指令(2条)★RET(⽆条件从⼦程序或中断返回)★RETC(条件返回指令)4.3.4.4、其它控制指令(3条)★RPT(重复执⾏下条指令)★NOP(空操作)★IDEL(暂停)返回。
DSP指令大全(最全)附录6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令二、逻辑运算指令三、程序控制指令6.注:?条件―真‖,§条件―假‖,※延迟指令。
四、加载和存储指令4.6.7.五.伪指令2.初始化常数(数据和存储器)的伪指令3.调整段程序计数器伪指令(SPC).align 把SPC调整到页边界.even 把SPC调整到偶数字边界4.控制输出列表格式化伪指令5.条件汇编伪指令.break [well-defined expression] 如果条件真结束.loop汇编,.break结构是可选项.else 如果.if条件为假,汇编代码块.else结构是可选项.elseif well-defined expression——如果if条件为假且.elseif 条件为真,汇编代码块.else结构是可选项.endif 结束.if代码块.endloop 结束.1oop代码块.if well-defined expression 如果条件为真则汇编代码块.loop [well-defined expression] 开始代码块的重复汇编6. 汇编符号.asg [”] character string [”],substitution symbol——把字符串赋予替代的符号..endstruct 结束结构定义.equ 使值和符号相等.eval well-defined expression,substitution symbol 根据数字替代符号完成运算.newblock 取消局部标号.set 使数值和符号相等.struct 开始结构定义.tag 把结构属性赋予标号7.宏指令宏定义:Macname .macro[参数1],[…],[参数n]宏调用:[标号][:] macname [参数1],[…],[参数n]8.编译软件指令①汇编器:asm500.exeasm500[input file[object file [listing file] [-options]]-c—使汇编语言文件中大小没有区别。
DSP汇编指令学习笔记(免费下载)DSP汇编指令学习笔记Knowledge问题谁在DSP的汇编语言中加入了NOP指令?NOP指令加入的条件是什么?About DSP1.DSP是实时数字信号处理的核心和标志。
2.DSP分为专用和通用两种类型。
专用DSP一般采用定点数据结构(一般不支持小数),数据结构简单,处理速度快;通用DSP灵活性好,但是处理速度有所降低。
3.DSP采用取指、译码、执行三个阶段的流水线(Pipeline)技术,缩短了执行时间,提高了运行速率。
DSP具有8个Functional unit,如果并行处理的话,以600MHz的时钟计算,如果执行的指令是single cycle指令,则可以4800MIPS(指令每秒)。
4.DSP的8个functional Unit,具有独特的功能,对滤波、矩阵运算、FFT(傅里叶变换)具有哈弗结构把指令空间与数据空间隔离的存储方式。
这样实现是为了实现指令的连续读取,而实现pipeline流水线结构。
传统哈弗结构:两个独立的存储空间,还使用独立总线。
让取指与执行存储独立,加快执行速度。
改进型哈弗结构:指令与数据的存储空间还是独立的。
但是使用公共的总线(地址总线与数据总线)。
这样实现的原因是因为出现了CACHE,数据的存储动作大部分被内部的CACHE 总线承接了,所以总线冲突的情况会大大减少。
同时让总线的结构与控制变得简单,CACHE 存储的速度也明显快于外设存储器。
冯诺依曼结构:是指令空间与数据空间共享的存放方式。
它不能实现pipeline的执行过程。
Pipeline(流水线)技术是把指令的取指-译码和指令的执行独立开来的技术。
虽然每条指令的过程还是要经过取指-译码-执行三个阶段最少3个CPU Cycle。
但是多个指令同时并行先后进行,保证总体的指令吞吐速率理想情况下可以保证在每个指令只要一个CPU CYCLE。
Pipeline技术必须要有哈弗结构支持,即必须把指令空间与数据空间隔离存放。
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片内有一部件——软件可编程等待状态发生器,控制着外部总线的工作。