3986.net
小网站 大容量 大智慧
当前位置:首页 >> 计算机软件及应用 >>

dsp指令


1、exam.asm 源文件正文: 、 源文件正文: ;/********************************************************/ ;/* exam.asm */

;/* TMS320C54X DSP 数据寻址方式的例子 */ ;/*********************************************************/ ;定义符号常量 T .set 00EH BRC .set 01AH

SWWSR .set 028H CLKMD .set 058H

DAT0 .set 000H DAT1 .set 001H DAT2 .set 002H DAT3 .set 003H DDAT0 .set 02104H DDAT1 .set 02105H DDAT2 .set 02106H DDAT3 .set 03107H PDAT0 .set 01f00H PDAT1 .set 01f01H PDAT2 .set 01f02H PDAT3 .set 01f03H ;在当前文件中定义一个符号,可以被其它文件使用。 .def _main .def _c_int00 .def _DELAY

;段定义伪指令,此段存放程序代码。 .text ;初始化程序 _c_int00: RPT #1000H NOP LD ;延时。重复指令。重复执行下一条指令 k+1 次

;空指令。 #40H,DP ;设置 DP 指针。加载指令。 ;设置 SP 指针。存储指令。 ;长立即数加至累加器。加法指令。

STM #4000H ,SP ADDM #7FFH,*(SP)

ANDM #0FFFEH,*(SP) ;操作数和长立即数相与。与逻辑运算指令。

SSBX INTM

;禁止中断。INTM 是 ST1 中的全局中断屏蔽位。

;对 INTM 置 1。混合程序控制指令。 STM #07FFFH,SWWSR ;置外部等待时间 STM #06004H,CLKMD ;设置 CLKMD。 LD #0FFFFH,A CALL _DELAY ;立即数加载至目的累加器 A ;子程序调用。

STM #087FBH,CLKMD ;设置 CLKMD。 LD #0FFFFH,A CALL _DELAY B _main ;主程序 _main: RSBX CPL ;DSP 初始化。对状态寄存器 ST1 中的编辑方式位清 0。 ;立即数加载至目的累加器 A ;子程序调用。

;无条件分支转移。

;混合程序控制指令。 NOP NOP ;立即数寻址:指令中有一个固定的立即数。 LD #1234h,A ;;立即数寻址。加载指令。

;绝对地址寻址:指令中有一个固定的地址(16 位)。 ST NOP NOP NOP #5678h,*(DDAT1) ;;DDAT1=0X2105。存储长立即数。绝对地址寻址。

ST

#5679h,*(PDAT1) ;存储长立即数。

;累加器寻址:把累加器的内容作为地址去访问程序存储器中的一个单元。 LD #PDAT1,A ;累加器寻址 PDAT1=0X1F01 ;;DAT2=0X2002。混合加载和存储指令。

READA DAT2

;按累加器 A 寻址读程序存储器并存入数据存储器 NOP NOP NOP ; ;直接寻址:指令编码中含有的 7 位地址与 DP 或 SP 一起合成数据存储器中操作数的实际地址。 ;CPL=0,数据存储器地址的 7 位与 DP 中的 9 位字段相连组成 16 位的数据存储器地址。 ST NOP #3210h,DAT3 ;直接寻址(DP 指针)DAT3=0X2003

NOP NOP

;CPL=1,数据存储器地址的 7 位与 SP 中的 9 位字段相连组成 16 位的数据存储器地址。 SSBX CPL NOP NOP NOP ST NOP NOP NOP RSBX CPL NOP NOP NOP ;CPL=0 #9876h,DAT3 ;直接寻址(SP 指针)SP=0X47FE+3 ;CPL=1

;间接寻址:通过辅助寄存器寻址。 STM #DDAT3,AR0 ST NOP NOP NOP #9876h,*AR0 ;间接寻址 DDAT3=0X3107。长立即数存储到 MMR。 ;存储长立即数。

;绝对地址寻址:指令中有一个固定的地址(16 位)。

;数据存储器(DMAD)寻址。 MVDK DAT0,DDAT0 ;绝对地址(dmad)寻址 DAT0=0X2000,DDAT0=0X2104

;数据存储器内部指定地址传送数据。 MVKD DDAT1,DAT1 ;DDAT1=0X2105,DAT1=0X2001

;数据存储器内部指定地址传送数据。 NOP NOP NOP ;程序存储器(PMAD)寻址。 MVDP DAT0,PDAT0 MVDP DAT1,PDAT1 ;绝对地址(pmad)寻址 PDAT0=0X1F00 ;数据存储器向程序存储器传送数据。

NOP NOP NOP

;存储器映射寄存器寻址:修改存储器映射寄存器中的值,而不影响当前数据页面指针 DP ;和当前堆栈指针 SP 的值。 STM #8888h,T NOP NOP NOP ;存储器映射寄存器寻址。T 暂存器。

;堆栈寻址:把数据压入或弹出系统堆栈。 PSHM T POPM T NOP NOP NOP ;堆栈寻址。SP 减 1 后将 MMR 压入堆栈。 ;把堆栈顶部数据弹出到 MMR,然后 SP 加 1。

;/********************************************************/ ;程序存储器到数据存储器的复制(数据快的移动) STM #4000h,AR0 RPT #0xff MVPD 1000H,*AR0+ NOP NOP NOP

STM #DDAT2,AR2 ST #1234h,*AR2

STM #DDAT3,AR3 ST #5678h,*AR3

LD #0x1000,A SSBX FRCT SSBX OVM NOP ;FRCT=1。小数方式位 ;OVM=1。溢出方式位。发生溢出时,目的累加器置成正的最大值或负的最大值。

NOP

NOP NOP

;双操作数寻址。属于间接寻址。

MAC *AR2+,*AR3+,A;两个数相乘加到累加器中。寻址结束后,ARX 中的地址加 1。 ;A 的值是 C4C10C0H。而 1234H*5678H=6260060H。两者不一致的原因如下。 ;FRCT=1,小数方式,乘法器输出左移一位,消去相乘时产生的冗余符号位。 ;1234H*5678H ;左移一位 =6260060H=110 0010 0110 0000 0000 0110 0000 B

=C4C00C0H=110 0010 0110 0000 0000 0110 0000 0 B

;C4C00C0H+1000H=C4C10C0H NOP NOP NOP NOP NOP RSBX FRCT RSBX OVM NOP NOP SSBX CPL B $ ;CPL=1 ;FRCT=0 ;OVM=0

;无条件分支转移。死循环。

;延时程序 _DELAY: STLM RPTB A,BRC ;累加器低位存储到 MMR。

_DELAY1-1 ;块重复。重复下一条指令至_DELAY1 前一条?

;重复一次,BRC 减 1。 NOP NOP NOP NOP _DELAY1:RET .end ;程序块结束 TMS32054x 系列 DSP 的寻址方式包括数据寻址和程序寻址。 1、立即数寻址

立即寻址的指令中,包含了一个立即数作为操作数,这个操作数在 CUP 从程序存储器取指时,已被取入 CPU。 例:LD #25,A 2、绝对寻址 绝对寻址的指令中给出操作数所在的空间的 16 位地址。地址有四种表示形式:dmad,pmad,PA ,和*(1k) 例:MVKD 2510H,*AR2 BC 2050,TC PORTR 09H,*AR1 LD *2100H,A

3、累加器寻址(A,B) 累加器寻址指令中,用累加器中内容给出了操作数在程序存储器中的地址。有两条指令可用累加器寻址。 READA Smem 将累加器 A 所指程序存储器单元内容读到 Smem 所指数据存储单元 WRITA Smem 将 Smem 所指单元内容写到 A 所指程序存储器单元 4、直接寻址 直接寻址指令中,给出一个 7 数 dma 作为偏移地址,与基地址(DP 或 SP)共同组成 16 位的地址,从数 据存储单元取出操作数。 例:DP=5,偏移量位 7FH,则操作数在数据存储器单元的地址为 02FFH 5、间接寻址 间接寻址指令中,操作数在数据存储器中的地址由八个辅助寄存器 AR0-AR7 中人一个的内容给出。 间接寻址指令有单操作数间接寻址指令和双操作数间接寻址指令两类。 例:MPY *AR3,AR2,A ;将两个双访问数据存储器操作数相乘,结果送 A 6、存储器映射寄存器寻址 这种方式用于修改存储器映射寄存器 MMR 的内容时,采用类似直接寻址或间接寻址方法,给出待修改寄 存器的地址,却不必使用 DP 或 SP。 例:若用 AR1 来寻址一个 MMR,*AR1 的内容为 5B24H,LD AR1,A 中,待访问 MMR 的地址为 0024H 7、堆栈寻址 DSP 的堆栈在子程序调用过程中能够自动保存主程序中返回地址,在响应中断时,能够自动保存断点地 址,同时也可用来保存和传送数据。访问堆栈的指令有四条:PSHD,PSHM,POPD,POPM

DSP 指令实例: 指令实例: DSP 直接寻址(只能寻址 C28x 的低 4M 数据地址空间) : (1)@6 位二进制立即数方式,适用于 AMODE=0,地址高 10 位为 0,地址次高 16 位为 DP 的低 16 位,地址低 6 位为 6 位二进制立即数,可寻址 DP 以上的 0 到 63 字的地址范围:

; VarA 和 VarB 在同一个长度为 64 字的分页中,VarC 和 VarD 同在另外一个长度为 64 字的 分页中 MOVW DP,#VarA ; 把变量 VarA 所在页的首地址载入段指针 DP 中 ADD AL,@VarA ; 把变量 VarA 的内容加到 AL 中 MOV @VarB,AL ; 把 AL 的内容写进变量 VarB 中 MOVW DP,#VarC ; SUB AL,@VarC ; MOV @VarD,AL ; (2)@7 位二进制立即数方式,适用于 AMODE=1,地址高 10 位为 0,地址次高 15 位为 DP 的低 15:1 位,地址低 7 位为 7 位二进制立即数,可寻址 DP 以上的 0 到 127 字的地址范围: SETC AMODE .lp_amode MOVW DP,#VarA ADD AL,@@VarA MOV @@VarB,AL MOVW DP,#VarC SUB AL,@@VarC MOV @@VarD,AL 栈寻址(只能寻址 C28x 的低 64k 数据地址空间) : (2) *-SP[6 位二进制立即数]方式,适用于 AMODE=0,高 16 位地址为 0,低 16 位地址 为 SP-6 位二进制立即数,SP 不变,可寻址低于 SP 的 0 到 63 个字地址范围: ADD AL,*-SP[5] ; 栈顶减 5 个字所指向的内容(16 位)加到 AL 中,SP 不变 MOV *-SP[8],AL ; AL 的内容(16 位)写到栈顶减 8 个字所指向的位置,SP 不变 ADDL ACC,*-SP[12] ; 栈顶减 12 个字所指向的内容(32 位)加到 ACC 中,SP 不变 MOVL *-SP[34],ACC ; ACC 的内容(32 位)写到栈顶减 32 个字所指向的位置,SP 不变 (2) *SP++方式,适用于 AMODE=x,16 位操作时 SP=SP+1,32 位操作时 SP=SP+2,高 16 位地址为 0,低 16 位地址为 SP: MOV *SP++,AL ; AL 的内容(16 位)压入栈顶 MOVL *SP++,P ; P 的内容(32 位)压入栈顶 (3) *--SP 方式,适用于 AMODE=x,16 位操作时 SP=SP-1,32 位操作时 SP=SP-2,高 16 位地址为 0,低 16 位地址为 SP: ADD AL,*--SP ; 栈顶内容弹出并加到 AL 中(16 位) MOVL ACC,*--SP ; 栈顶内容弹出到 ACC 中(32 位) C28x 间接寻址: 间接寻址:

(1) *XARn++方式,适用于 AMODE=x,ARP=n,32 位地址为 XARn,16 位操作时 XARn=XARn+1,32 位操作时 XARn=XARn+2: MOVL XAR2,#Array1 ; 载入 Array1 的首地址到 XAR2 中 MOVL XAR3,#Array2 ; 载入 Array2 的首地址到 XAR3 中 MOV @AR0,#N-1 ; 载入循环计数 N 到 AR0 中 Loop: MOVL ACC,*XAR2++ ; 载入 XAR2 指向的内容到 ACC 中,XAR2 后加 1 MOVL *XAR3++,ACC ; ACC 的内容写入 XAR3 指向的地址,XAR3 后加 1 BANZ Loop,AR0-- ; 循环到 AR0 == 0,AR0 后加 1 (2)*--XARn 方式,适用于 AMODE=x,ARP=n,32 位地址为 XARn,16 位操作时 XARn=XARn-1,32 位操作时 XARn=XARn-2: MOVL XAR2,#Array1+N*2 ; 载入 Array1 的末地址到 XAR2 中 MOVL XAR3,#Array2+N*2 ; 载入 Array1 的末地址到 XAR2 中 MOV @AR0,#N-1 ; 载入循环计数 N 到 AR0 中 Loop: MOVL ACC,*--XAR2 ; XAR2 先减 1,载入 XAR2 所指向的内容到 ACC 中 MOVL *--XAR3,ACC ; XAR3 先减,ACC 内容写入 XAR3 所指的位置 BANZ Loop,AR0-- ; 循环到 AR0 == 0, AR0 后加 1 (3)*+XARn[AR0 或(AR1)]方式,适用于 AMODE=x,ARP=n,32 位地址为 XARn+AR0 (或 AR1) ,XAR0(或 XAR1)的低 16 位作为无符号数加到 XARn 中,忽略高 16 位,可 能会产生到 XARn 高 16 位的溢出: MOVW DP,#Array1Ptr ; 指向 Array1Ptr 的段 MOVL XAR2,@Array1Ptr ; 载入 Array1 的首地址到 XAR2 中 MOVB XAR0,#16 ; AR0 = 16, AR0H = 0 MOVB XAR1,#68 ; AR1 = 68, AR1H = 0 MOVL ACC,*+XAR2[AR0] ; 把 Array1[16]和 Array1[68]内容互换, 首先载入 Array1[16]内容 到 ACC MOVL P,*+XAR2[AR1] ; 把 Array1[68]内容到 P MOVL *+XAR2[AR1],ACC ; 写入 ACC 内容到 Array1[68] MOVL *+XAR2[AR0],P ; 写入 P 内容到 Array1[16],完成互换 (4)*+XARn[3 位二进制立即数]方式,适用于 AMODE=x,ARP=n,32 位地址为 XARn+无 符号 3 位二进制立即数,*XARn 等价于*+XARn[0]: MOVW DP,#Array1Ptr ; 指向 Array1Ptr 的段 MOVL XAR2,@Array1Ptr ; 载入 Array1 的首地址到 XAR2 MOVL ACC,*+XAR2[2] ; 把 Array1[2]和 Array1[5]内容互换, 首先载入 Array1[2]内容到 ACC MOVL P,*+XAR2[5] ; 把 Array1[5]内容到 P MOVL *+XAR2[5],ACC ; 写入 ACC 内容到 Array1[5] MOVL *+XAR2[2],P ; 写入 P 内容到 Array1[2],完成互换

循环间接寻址: 循环间接寻址: DSP 寄存器寻址 寄存器寻址: (1)32 位操作,使用寄存器@ACC,@XT,@P,@XARn,当@ACC 作为目的操作数时, 可能会影响 Z,N,V,C,OVC 标志位。 (2)16 位操作,使用寄存器@AL,@AH,@PL,@PH,@TH,@SP,@ARn,当@AL 或@AH 作为目的操作数时,可能会影响 Z,N,V,C,OVC 标志位。对应的高 16 位或低 16 位不受影响。

数据/程序/IO 空间立即寻址: (1) *(16 位二进制立即数)方式,地址的高 16 位为 0,低 16 位为 16 位二进制立即数。 当该指令连续使用时,每次地址都会后加。只能寻址低 64k 数据空间。可用指令: MOV loc16,*(0:16bit) ; [loc16] = [0:16bit] MOV *(0:16bit),loc16 ; [loc16] = [0:16bit] (2) *(PA)方式,地址的高 16 位为 0,低 16 位为 PA 中的 16 位二进制立即数。当该指令连 续使用时,每次地址都会后加。该模式寻址时,在访问 IO 空间时,IO 选通信号被置位。用 数据地址线访问 IO 空间。可用指令: OUT *(PA),loc16 ; IOspace[0:PA] = [loc16] UOUT *(PA),loc16 ; IOspace[0:PA] = [loc16] (unprotected) IN loc16,*(PA) ; [loc16] = IOspace[0:PA] (3) 0:pma 方式,22 位的地址高 6 位为 0,低 16 位为 16 位二进制立即数 pma,当该指令连 续使用时,每次地址都会后加。只能寻址低 64k 程序空间。可用指令: MAC P,loc16,0:pma ; ACC = ACC + P << PM,P = [loc16] * ProgSpace[0:pma] (4) *(pma)方式,22 位的地址高 6 位为 0,低 16 位为 16 位二进制立即数 pma,当该指令 连续使用时,每次地址都会后加。只能寻址低 64k 程序空间。可用指令: XPREAD loc16,*(pma) ; [loc16] = ProgSpace[0x3F:pma] XMAC P,loc16,*(pma) ; ACC = ACC + P << PM,P = [loc16] * ProgSpace[0x3F:pma] XMACD P,loc16,*(pma) ; ACC = ACC + P << PM,P = [loc16] * ProgSpace[0x3F:pma], [loc16+1] = [loc16] DSP 程序空间间接寻址: 程序空间间接寻址: (1) *(AL)方式,22 位的地址高 6 位为 0x3F,低 16 位为 AL,当该指令连续使用时,AL 的内容被复制到一个影子寄存器中,并在每次地址后加,AL 的内容不变。只能寻址低 64k 程序空间。可用指令: XPREAD loc16,*AL ; [loc16] = ProgSpace[0x3F:AL]

XPWRITE *AL,loc16 ; ProgSpace[0x3F:AL] = [loc16] (2) *XAR7 方式,22 位地址为 XAR7,当在指令 XPREAD 或 XPWRITE 中连续使用时, XAR7 的内容被复制到一个影子寄存器中,并每次地址后加, XAR7 的内容不变。 其它指令则 不会。可用指令: MAC P,loc16,*XAR7 ; ACC = ACC + P << PM,P = [loc16] * ProgSpace[*XAR7] DMAC ACC:P,loc32,*XAR7 ; ACC = ([loc32].MSW * ProgSpace[*XAR7].MSW) >> PM, ; P = ([loc32].LSW * ProgSpace[*XAR7].MSW) >> PM QMACL P,loc32,*XAR7 ; ACC = ACC + P >> PM, ; P = ([loc32] * ProgSpace[*XAR7]) >> 32 IMACL P,loc32,*XAR7 ; ACC = ACC + P, ; P = ([loc32] * ProgSpace[*XAR7]) << PM PREAD loc16,*XAR7 ; [loc16] = ProgSpace[*XAR7] PWRITE *XAR7,loc16 ; ProgSpace[*XAR7] = [loc16] (2) *XAR7++方式,22 位地址为 XAR7, 16 位操作时 XAR7=XAR7+1,32 位操作时 XAR7=XAR7+2,指令重复时,地址后加。可用指令: MAC P,loc16,*XAR7++ ; ACC = ACC + P << PM,P = [loc16] * ProgSpace[*XAR7++] DMAC ACC:P,loc32,*XAR7++ ; ACC=([loc32].MSW * ProgSpace[*XAR7++].MSW)>>PM, ; P=([loc32].LSW * ProgSpace[*XAR7++].MSW)>>PM QMACL P,loc32,*XAR7++ ; ACC = ACC + P >> PM, P = ([loc32] * ProgSpace[*XAR7++]) >> 32 IMACL P,loc32,*XAR7++ ; ACC = ACC + P, P = ([loc32] * ProgSpace[*XAR7++]) << PM DSP 字节寻址: 字节寻址: *+XARn[AR0],*+XARn[AR0],*+XARn[3 位二进制立即数],32 位地址为 XARn+偏移量 (AR0/AR1/3 位二进制立即数) ,如果偏移量为偶数值,则访问 16 位存储器位置的低有效 位,高有效位不变;如果为奇数,则访问 16 位存储器位置的高有效位,低有效位不变。其 它所有寻址模式,只访问访问寻址位置的低有效位,不改变高有效位。可用指令: MOVB AX.LSB,loc16 ; if( address mode == *+XARn[AR0/AR1/3bit] )


推荐相关:

从功能 上可以分为配置指令、算术指令、逻辑指令、程序控制指令以及装载与存储指令 等5大类,总共有300多条指令。 1)配置指令配置指令主要用来对DSP芯片的工作模式...


DSP指令一览表_信息与通信_工程科技_专业资料。DSP指令一览表 DSP 指令一览表附录 6 TMS320C54x 指令系统一览表(按指令功能排列) 一、算术运算指令 1. 加法...


访问堆栈的指令有四条:PSHD,PSHM,POPD,POPM DSP 指令实例: 指令实例: DSP 直接寻址(只能寻址 C28x 的低 4M 数据地址空间) :(1)@6 位二进制立即数方式,...


DSPC2000汇编指令_法律资料_人文社科_专业资料。第六章 DSP 的寻址方式和汇编指令当硬件执行指令时,寻找指令所指定的参与运算飞操作数的方式——寻址方式。根据 程序...


1. MACR *AR3-, *AR4-, A, B 指令执行前 00 0000 1000H 00 0000 2200H 0003H 0 0100H 0200H 0345H 0400H 指令执行后 00 0000 1000H 00 000D ...


DSP指令读取与数据读取是走同一Pipeline中的,但是在不同的阶段完成的。指令获 取是在PG/PS/PW/PR/DP中完成的,它把指令送到执行单元。执行单元经过DC,后开始...


DSP 汇编指令总结 一、寻址方式: 1、立即寻址: 短立即寻址(单指令字) D15 D14 D13 D12 D11 1 0 1 1 1 D10 0 D9 1 D8 1 D7 0 D6 1 D5 1 D4 ...


DSP指令填空大三_计算机硬件及网络_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 DSP指令填空大三_计算机硬件及网络_IT/计算机_专业资料。电气工程实践...


(5)特殊的 DSP 指令(6).指令周期短. (7)运算精度高.(8)硬件配置强.(9)DSP 最重要的特点: 特殊 的内部结构、强大的信息处理能力及较高的运行速度。 2 ...


DSP原理A卷_电子/电路_工程科技_专业资料。一、填空题 1.在数字信号处理器寻址指令系统中,Dmad 为 16 位立即数,表示数 据存储器地址,Pmad 表示程序存储器...

网站首页 | 网站地图
3986 3986.net
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@qq.com