DSP指令
dsp汇编指令系统介绍(精)

汇编指令集本节根据指令的功能来分,提供六张表来说明指令集的概况:累加器、算数和逻辑指令(表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常用汇编语言指令简介

1. 累加器等指令举例
Example 1:ADD 1,1;(假设DP = 6),把 第6个数据页的第一个内存单元内容左移一 位加到累加器 Example 2:LACC *,4; (与SXM有关) Example 3:ROL;把累加器内容循环左移 Example 4:SACL *,0,AR7 ;把当前工作寄 存器指示内容左移0位送入累加器的低8位 Example 5:RPT #15 SUBC * ;累加器减去当前寄存 器指的内容,连续减16次,结果存累加器
南航自动化学院DSP技术应用实验 室
LAR AR1,#200H ;设定AR1的值
(2)指明间接寻址选项(*,*+,*-,*0+)) 例如:MAR *,AR0 1, ;然后指向工作寄存器AR1 (3)指明下一个辅助寄存器(可选) 例如: MAR *,AR1 ADD *+,AR4 ;把当前工作寄存器AR1指 向的数据单元内容加至累加器,然后AR1内容加 1,并把工作寄存器定为AR4
2. 工作寄存器等指令举例
Example1:MAR *+,AR1;把当前工作寄 存器的内容加1,然后再改变工作寄存器为 AR1。 Example2:LAR AR4,#8123h;把AR4的 值改变为立即数。 LAR AR0,16;(DP=6)把 地址=310H的内存单元内容装入AR0。 Example3:SAR AR0,*+;(如果当前工 作寄存器=AR1)把AR0的内容拷贝到AR1 南航自动化学院DSP技术应用实验 指向的内存单元。 室
4. 转移指令举例
南航自动化学院DSP技术应用实验 室
EQ NEQ LT LEQ GT GEQ NC C NOV BIO NTC TC UNC
DSP汇编指令索引

指令
指令
隐含并行
105
算 术 运 算 指 令
绝对值 FIR滤波 最小均方 补码 归一化 饱和和舍入 平方距离 位域比较 位域抽取 位域扩展
107 108 109 109 109 110 110 111 111 111
位 操 作 指 令
存储器位操作
112
寄存器位操作
113
状态位设置 扩展辅助 寄存器操 作指令 按位与/或 /异或/取反 位计数 逻辑移位 循环移位
114
115 116 117 118
逻辑运 算指令
TMS320C55x的指令系统 Page 累加器、辅助寄 MOV 存器或临时寄存 SWAP 119 器装载、存储、 SWAPP 移 移动、和交换 SWAP4 动 存储单元间的移 DELAY 122 指 动及初始化 MOV 令 POP 入栈和出栈 122 PSH CPU寄存器装载、 124 MOV 存储和移动 B 跳转 127 BCC CALL CALLCC 调用与返回 128 RET RETCC INTR 程 中断与返回 128 TRAP 序 RETI 控 PRT 制 PRTADD 指 PRTSUB 重复 128 令 PRTCC PRTB PRTBLOCAL XCC 条件执行 XCCPART 129 IDLE 空闲 空操作 NOP 软件复位 RESET
指令
TMS320C55x的指令系统
Page MPYM::MOV MACM::MOV MASM::MOV ADD::MOV SUB::MOV MOV::MOV ABS FIRSADD FIRSSUB LMS NEG MANT ::NEXP EXP SAT ROUND SQDST BAND BFXTR BFXPA BTST BNOT BCLR BSET BTSTSET BTSTCLR BTSTNOT BTST BNOT BCLR BSET BTSTP BCLR BSET MOV AMAR AMOV POPBOTH PSHBOTH NOT AND/OR/XOR BCNT SFTL ROL
DSP指令一览表

SUBXmem,SHFT,srcsrc=src—Xmem<<SHFT操作数移位后与累加器相减11
SUBXmem,Ymem,dstdst=Xmem<<16—Ymem<<16两个操作数分别左移16位后相减11
MPYXmem,Ymem,dst dst=Xmem*Ymem,T=Xmem两个操作数相乘11
MPYSmem,#lk,dstdst=Smem*#lk,T=Smem长立即数与操作数相乘22
MPY#lk,dstdst=T*#lk长立即数与T寄存器值相乘22
MPYAdstdst=T*A(32-16)T寄存值与累加器A高位相乘11
SUB#lk[,SHFT],src[,dst]dst=src—#1k<<SHFT长立即数移位后与累加器相减22
SUB#lk,16,src[,dst]dst=src—#1k<<16长立即数左移16位后与累加器相减22
SUBsrc[,SHIFT][,dst]dst=dst—src<<SHIFT源累加器移位后与目的em<<16,A=rnd(A*T+B)求多项式的值11
RNDsrc[,dst]dst=src+215累加器舍入运算11
SATsrcsaturate(src)累加器饱和运算11
SQDSTXmem,YmemB=B+A(32—16)*A(32—16),A=(Xmem—Ymem)<<16求距离的平方11
1
4. 乘法累加/减指令
句法表达式说明
字
数
周
dsp内指令执行的流程

dsp内指令执行的流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!dsp内指令执行的流程DSP内指令执行的流程通常包括以下几个阶段:一、取指阶段1.1、从指令缓存中取出指令1.2、解码指令,识别操作码和操作数二、执行阶段2.1、根据操作码进行相应的运算操作2.2、访问寄存器文件,读取或写入操作数三、访存阶段3.1、如果指令需要访问存储器,则发送地址到数据存储器3.2、从数据存储器读取数据或向其写入数据四、写回阶段4.1、将运算结果写回寄存器文件4.2、更新程序计数器,指向下一条指令五、中断处理阶段5.1、检查是否有中断请求5.2、如果发生中断,则执行相应的中断服务程序总结:DSP的指令执行流程是一个典型的流水线过程,通过多个阶段的协同工作,实现对指令的高效执行。
dsp1-6实验指令

实验二、CCS操作Cmd文件(实验二、三、四)MEMORY{PAGE 0:VECS: org=0x0080, len=0x80PROM: org=0x1000, len=0x1000 /* 4k words */PAGE 1:STACK: org=0x100, len=0x400 /* 1k words */DARAM: org=0x2000, len=0x1000 /* 4k words */}SECTIONS{ .text :> PROM PAGE 0vectors :> VECS PAGE 0.bss :> DARAM PAGE 1.data :> DARAM PAGE 1}S54文件;An example to show how to write an assembly language source file; y=a1*x1+a2*x2;******************************************************************************STACK_ADDR .set 0x0500 ;设置堆栈底端地址;在变量段分配数据,为未初始化的变量保留空间.bss a,2.bss x,2.bss y,1;在数据段分配数据,存入初始化数据.datatable:.word 10,5 ;初始化a1=10,a2=5.word 8,6 ;初始化x1=8,x2=6.mmregs ;开启系统默认的寄存器.global main ;定义全局符号;------------------------------------------------------------------------------.text ;开始编写程序main:stm #STACK_ADDR, SP ;设置堆栈stm #0x00a8, PMSTstm #0x0000, SWWSR;================================================stm #a, AR2 ;设置AR1 指向 astm #table, AR3 ;设置AR3指向tablerpt #1mvdd *AR3+, *AR2+ ;循环一次,将0x000A和0x0005存放在地址0x2000 stm #x, AR2 ;设置AR2指向xrpt #1mvdd *AR3+, *AR2+ ;将地址0x2005低16位的0x0008和0x0006存放到地址为0x2002的存储器空间call SUM ;执行sum模块的功能;死循环,使PC在当程序结束时锁定在一个已知的区域dead_loop:nopnopnopb dead_loop;================================================; y=a1*x1+a2*x2SUM:stm #a, AR3 ;设置AR3指向astm #x, AR4 ;设置AR4指向xrptz A, #1 ;清零寄存器A,并设置将下条乘加指令循环一次mac *AR3+, *AR4+, A ;完成a1*x1+a2*x2,最终的结果存放在A中stl A, *(y) ;将寄存器A的底16位存放在地址0x2004ret;------------------------------------------------------------------------------.sect "vectors" ;定义初始化了的带名称的段int_RESET:b main ;当有复位中断时,跳转至mainnopnop.space 124*16 ;若没有其他的中断,保留空间初始化时将A与X互换位置实验三:使用者如果希望修改其功能,可以直接编写gel文件,保存并重新装载。
DSP指令一览表

无符号数乘法
11
SQUR Smem,dst
dst=Smem*Smem,T=Smem 操作数的平方
11
SQUR A,dst
dst=A(32—16)*A(32—16) 累加器 A 的高位平方
11
1
4. 乘法累加/减指令
句法
表达式
说明
字周 数期
MAC Smem,src
src=src+T*Smem
操作数与 T 寄存器值相乘后加到累加器
操作数移位后加至累加器 操作数左移 16 位加至累加器
11 11
ADD Smem[,SHIFT],src[,dst] dst=src+Smem<<SHIFT 操作数移位后加到累加器
22
ADD Xmem,SHFT,src
src=src+Xmem<<SHFT 操作数移位后加到累加器
11
ADD Xmem,Ymem,dst
, 操作数与累加器 A 高位相乘后加到累加器 B 1 1
MACA T,src[,dst]
dst=src+T*A(32—16)
T 寄存器值与累加器 A 高位相乘
11
MACAR Smem[,B]
B=rnd(B+Smem*A(32—16)) , T 寄存器值与累加器 A 高位相乘后加到累加
T=Smem
B(带舍入)
11
SUB Xmem,Ymem,dst
dst=Xmem<<16—Ymem<<16 两个操作数分别左移 16 位后相减
11
SUB #lk[,SHFT],src[,dst] dst=src—#1k<<SHFT
dsp指令语法说明

指令语法说明dma数据存储器地址的7位最低有效位,它与数据页面指针(DP)构成一个完整的16位数据存储器地址。
pma 16位程序存储器地址。
shift左移0~15位(缺省为0)。
ARn n为数值0~7,ARn指定下次的辅助寄存器。
ind选择以下7种符号之一。
*,*+,*-,*0+,*0-,*BR0+,*BR0-。
# 立即寻址方式中常用的前缀。
数值前面带“#”,表示该数值为一个立即数。
例如:ADD #3h,表示累加器的内容和3h相加。
数值前面不带“#”,表示该数值为间接寻址中在数据指针DP所选定的据存储器页面内的偏移量。
例如:ADD 3h,表示累加器的内容与数据指针DP所选定的当前页面内的3h单元的内容相加。
k8位短立即数。
lk16位长立即数。
在指令格式中用k和lk来区分8位和16位的立即数(在实际指令书写中长立即数前面不带“l”)。
例如:ADD #222h,1;将长立即数222h左移1位与累加器内容相加,222h前就不带“l”。
[, x]操作数x是可选项。
[x1[, x2]] 操作数x1和x2是可选项,如果若不写x1,也就不能写x2。
例如指令ADD ind[, shift[, ARn]]中必须提供ind,而shift和ARn可以缺省,* 但若没有shift,就不能写ARn。
如ADD *+ 还可以包括可选项shift,如ADD *+, 5。
** 如果希望包含ARn,即使不移位,也必须写上shift,如ADD *+,0,AR2操作数0表示不移位,但必须写。
ADD *+,AR2是错误指令。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
14
5. 测试指令 BIT *AR2+,12
指令操作前 TC AR2 数据存储器 0100H X 0100H 7688H TC AR2
指令操作后 1 0101H
0100H
7688H
15
程序控制指令
分支转移指令 调用子程序指令 中断指令 返回指令 堆栈操作指令 重复指令 其它控制指令
16
1. 分支转移指令 举例
A
指令操作前 00 0000 3000H 1F45H A PC
指令操作后 00 0000 3000H 3000H
BACC A
PC
17
2. 调用子程序指令 举例
指令操作前 A 00 0000 3000H 0025H 1111H 4567H A PC SP 1110H 指令操作后 00 0000 3000H 3000H 1110H 4567H
30
汇编指令
常用的汇编命令
.usect
.bss .data .sect .text .word .int .title .end
为未初始化变量保留存储空间的自 定义段 (长度) 通常为未初始化的变量留出的空间 已初始化数据段 建立包含代码和数据的自定义段 ,常用于 定义中断向量表 紧随其后的是汇编程序正文 初始化一个或多个16位整数(有符号) 初始化一个或多个16位整数 (无 符号) 在列表页头显示一个标题 结束程序
TMS320C54x
38
顺序结构程序
顺序结构是最基本的程序结构形式,程序的 语句或者结构被连续执行
39
分支结构程序
程序分支主要是靠条件转移指令来实现的, 利用这些指令可以执行分支操作,循环控制 等。
40
循环程序结构
循环程序设计主要用于某些需要重复进行的 操作,简化程序,节约内存。
41
46
编辑各类文件.如头文件(.h文件),命令文件(.cmd文件)和源程 序(.c,.asm文件)等.可以使用一般的编辑软件或CCS集成编辑 环境进行各类文件编辑. 对工程进行编译.如果有语法错误,将在构建(Build)窗口中显示 出来.用户可以根据显示的信息定位错误位置,更改错误. 排除程序的语法错误后,用户可以对计算结果/输出数据进行分 析,评估算法性能.CCS提供了探针、图形显示、性能测试等工 具来分析数据、评估性能.
A B AR3 C16 0100H 0101H
00 5678 8933H 00 6BAC 1D89H 00FEH 1 1534H 9456H
8
6. 特殊运算指令
TMS320C54x指令系统还提 供了15条特殊的运算指令。 在需要的场合灵活应用这些 指令,可以大大提高程序的 编写速度和执行速度,缩短 程序的长度,减少指令执行 的周期。
37
C源 程 序 C源 程 序 C源 程 序 宏源文件 归档器 宏库 C编 译 器 汇编源文件 汇编器 助记符指令转 换为代数指令 汇编源文件
归档器
COFF 目标文件
建立可用库
目标文件库
连接器
运行支持库 调试工具
COFF 可执行文件 Hex格 式 转 换 EPROM 编 程 器 绝对列表 交叉引用列表
9
逻辑运算指令
逻辑与(AND)运算指令 逻辑或(OR)运算指令 逻辑异或(XOR)运算指令 移位(SHIFT)指令 测试(TEST)指令
10
1. 逻辑与(AND)运算指令 举例
A
指令操作前 00 00FF 1200H 0100H A AR3
指令操作后 00 0000 1000H 0101H
AND *AR3+,A
3
1.加法指令
特 点 注 意
将一个16位的操作数加到指令指 定的累加器中
操作数左移时低位加0,右移时若SXM=1, 则高位进行符号扩展;若SXM=0,则高位加0。
举例
LD TEMP1,A ADD TEMP2,A STL A,TEMP3
4
2.减法指令
特 点
将从指定的累减器中减去一个16位的 减数
LD TEMP1,B RPT #15 SUBC TEMP2,B STL B,TEMP3 STH B,TEMP4 举例
12
3. 逻辑异或(XOR)运算指令
XOR *AR3+,A
指令操作前 A AR3 数据存储器 0100H 1500H 0100H 1500H 00 00FF 1200H 0100H A AR3 指令操作后 00 00FF 0700H 0101H
13
4. 移位指令 SFTL A,-8,B
指令操作前 A B C FF 8765 0055H FF 8000 0000H 0 A B C 指令操作后 FF 8765 0055H 00 0087 6500H 1
44
CCS一般工作在两种模式下:软件仿真器和 与硬件开发板相结合的在线编程.前者可以 脱离DSP芯片,在PC机上模拟DSP的指令集 与工作机制,主要用于前期算法实现和调试. 后者实时运行在DSP芯片上,可以在线编制 和调试应用程序.
45
CCS 集成开发环境应用
概述
利用CCS集成开发环境,用户可以在一个开发环境下完成工程定义、 程序编辑、编译链接、调试和数据分析等工作环节.使用CCS开发应 用程序的一般步骤为: 打开或创建一个工程文件.工程文件中包括源程序(C或汇编)、目标 文件、库文件、连接命令文件和包含文件.
SRCCD *AR6-,AGT
BRC 数据存储器 0232H
27
4. 并行执行指令 举例
A B ASM 指令操作前 00 0000 001CH FF 8421 1234H 1CH 1 0232H 0233H 0000H 8001H A B ASM SXM AR6 AR7 0232H 0233H 指令操作后 FF 8001 0000H FF 8421 1234H 04H 1 0231H 0234H F842H 8001H
22
7. 其他程序控制指令
其它程序控制指令包括:修改辅助寄存器内 容的MAR、保持空闲状态直到产生非屏蔽中 断或复位操作的INLE、不引起任何操作只 完成PC=PC+1的NOP指令等。
23
加载和存储指令
加载和存储指令 条件存储指令 并行的加载和存储指令 并行的加载和乘法指令 并行的加载和加减指令
31
举例
对一个数组进行初始化 X[5]={0,0,0,0,0} .bss x,5 STM #x,AR1 RPTZ A,#4 STL A,*AR1+
32
;该程序在0x1000开始的8个地址填写0xaaaa, 然后读出,并存储到0x1008开始的8个地址。 .text main: stm #1000h,ar1 rpt #07h st #0aaaah,*ar1+ stm #7h,ar3 stm #1000h,ar1 stm #1008h,ar2 loop: ld *ar1+,t st t,*ar2+ banz loop,*ar3.end ;MVDD *ar1+, ,*ar2+
TMS320C54x的指令系统
TMS320C54x的指令系统分为算术运算指 令、逻辑运算指令、程序控制指令及装载和 存储指令四种基本类型。
1
TMS320C54x指令系统概述
● ● ● ● 算术运算指令; 逻辑运算指令; 装载和存储指令; 程序控制指令;
2
算术运算指令
1.加法指令 2.减法指令 3.乘法指令 4.乘加和乘减指令 5.双操作数指令 6.特殊运算指令
20
5.重复指令 举例
RPT # 99 ;循环执行NOP指令100 ;次,RC=63H,单字指令 NOP RPT # 0FFFFH;将紧跟在RPT后面的下一条指 令循环执行FFFFH次
21
6. 堆栈操作指令
FRAME K POPD Smem POPM MMR PSHD Smem PSHM MMR
数据存储器 FFFFH 02Байду номын сангаас2H 12ABH 0233H
29
汇编语言伪指令 汇编语言源程序中,以.asm为程序的扩展名, 用“段”伪指令来组织程序的结构。 程序一般由数据段、堆栈段和代码段组成。 .data用于存放有初值的数据段;.usect用于 为堆栈保留一块存储空间;.text用于设置代 码段。
24
1. 加载指令 举例
指令操作前 A 00 0000 2000H 0000H A AR2 指令操作后 00 4567 1234H 0102H
ST # 0100H,AR2 DLD *AR2+,A
AR2 数据存储器 0100H 0101H
4567H 1234H
0100H 0101H
4567H 1234H
33
;将数据存储器中的数组x[20]复制到数组y[20]
.bss x,20 .bss y,20 … STM #x,AR2 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+
34
;指示灯闪烁 .text dm1: ssbx xf call delay rsbx xf call delay b dm1 delay: stm #270fh,ar6 stm #0f9h,ar7 banz banz .end
ST B,*AR6- || LD AR7+,A
SXM AR6 AR7 数据存储器 0232H 0233H
28
5. 其他加载和存储指令 举例
AR2
指令操作前 0222H 0233H AR2 AR4
指令操作后 0223H 0234H 12ABH 12ABH
MVDD *AR4+,*AR2+
AR4 0222H 0233H
AR3 数据存储器 0100H
1500H 0100H
1500H