DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节

上传人:E**** 文档编号:90581380 上传时间:2019-06-13 格式:PPT 页数:120 大小:863.50KB
返回 下载 相关 举报
DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节_第1页
第1页 / 共120页
DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节_第2页
第2页 / 共120页
DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节_第3页
第3页 / 共120页
DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节_第4页
第4页 / 共120页
DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节》由会员分享,可在线阅读,更多相关《DSP技术及应用第2版陈金鹰电子课件DSP技术及应用第5章节(120页珍藏版)》请在金锄头文库上搜索。

1、DSP技术及应用,陈金鹰 教授,2,第五章 汇编语言编程举例,第一节 汇编语言编程的基本方法 第二节 DSP的浮点运算方法 第三节 DSP在信号发生器上的应用 第四节 用DSP实现FIR滤波器,3,第一节 汇编语言编程的基本方法,1堆栈的使用,1.压入数据时,堆栈从高地址向低地址增长。 2.压栈时指针先减,SP-1,再压入数据; 3.出栈时,先弹出数据后,再SP+1。 4.如要用堆栈,必须先设置,后使用。,要 点,4,例5-1 设计一存储空间为100个单元的堆栈。 size .set 100 ;设置堆栈空间的 ;大小为100 stack .usect “STK”,size ;设置堆栈段的首地址

2、 ;和堆栈空间 STM #stack+size,SP ;将栈底地址指针送 ; SP,对其初始化,数据存储器,0,栈顶,SP,栈底,65535,stack ,STK,size=100,SP,5,例5-2 编写求解加、减法的程序,计算z=x+y-w。 SUM1:LD x,A ;将x地址的内容送A ADD y,A ;将y地址的内容与A中x值相加 SUB w,A ;将A中的内容与w相减,得z STL A,z ;将A的的计算值存入z地址中 例5-3 写求解直线方程的程序,计算y=mx+b。 SUM2:LD m,T ;将m地址的内容送T MPY x,A ;将x地址的内容与T中的m相乘, ;结果送A ADD

3、 b,A ;将A中的mx与b地址的内容相加, ;结果送A STH A,y ;将A的的计算结果存入y地址中 STL A,y+1 ;将A的的计算结果存入y+1地址中,2 加、减法和乘法运算,6,传送速度比加载和存储指令要快; 传送数据不需要通过累加器; 可以寻址程序存储器; 与RPT指令相结合(重复时,这些指令都变成单周期指令),可以实现数据块传送。,3 数据块传送,特 点,7,(1)数据存储器数据存储器 这类指令有: MVDK Smem,dmad 指令的字数/执行周期 2/2 MVKD dmad,Smem ;Smem=dmad 2/2 MVDD Xmem,Ymem ;Ymem=Xmem 1/1

4、(2)程序存储器数据存储器 这类指令有: MVPD pmad,Smem ;Smem=pmad 2/3 MVDP Smem,pmad ;pmad=Smem 2/4 pmad为16位立即数程序存储器地址; dmad为16位立即数数据存储器地址; Smem为数据存储器地址; Xmem、Ymem为双操作数数据存储器地址,Xmem从DB数据总线上读出。Ymem从CB数据总线上读出。,8,(3)数据存储器MMR 这类指令有: MVDM dmad,MMR ;指令的字数/执行周期 2/2 MVMD MMR,dmad ;dmad=MMR 2/2 MVMM mmrx,mmry ;mmry=mmrx 1/1 (4)

5、程序存储器(Acc)数据存储器 包括: READA Smem ;Smem=prog(A) 1/5 WRITA Smem ;prog(A)= Smem 1/5 mmrx,mmry为AR0AR7或SP; MMR为任何一个存储器映象寄存器;,9,例5-6 将数组x5 初始化为1,2,3,4,5。 .data ;定义初始化数据段起始地址 TBL: .word 1,2,3,4,5 ;为标号地址TBL ;开始的5个单元赋初值 .sect “.vectors” ;定义自定义段,并获 ;得该段起始地址 B START ;无条件转移到标号为START的地址 .bss x,5 ;为数组x分配5个存储单元 .tex

6、t ;定义代码段起始地址 START:STM #x,AR5 ;将x的首地址存入AR5 RPT #4 ;设置重复执行5次下条指令 MVPD TBL,*AR5+ ;将TBL开始的5个值传给x,(1)程序存储器数据存储器,应用举例,10,例5-7 将数据存储器中的数组x10复制到数组y10。 .title “cjy1.asm” ;为汇编源程序取名 .mmregs ;定义存储器映象寄存器 STACK .usect “STACK”,30H;设置堆栈 .bss x,10 ;为数组x分配10个存储单元 .bss y,10 ;为数组y分配10个存储单元 .data table:.word 1,2,3,4,5,

7、6,7,8,9,10 .def start ;定义标号start .text,11,start:STM #0,SWWSR ;复位SWWSR STM #STACK+30H,SP;初始化堆指针 STM #x,AR1 ;将目的地首地址赋给AR1 RPT #9 ;设定重复传送的次数为10次 MVPD table,*AR1+;程序存储器传送到数 ;据存储器 STM #x,AR2 ;将x的首地址存入AR2 STM #y,AR3 ;将y的首地址存入AR3 RPT #9 ;设置重复执行10次下条指令 MVDD *AR2+,*AR3+;将地址x开始的10个值 ;复制到地址y开始的10个单元 end: B end

8、 .end,12,用间接寻址方式获得操作数,且辅助寄存器只用AR2AR5; 占用程序空间小; 运行速度快。,4双操作数乘法,特 点,例5-8 编制求解 的程序。 利用双操作数指令可以节省机器周期。迭代次数越多,节省的机器周期数也越多。本例中,在每次循环中,双操作数指令都比单操作数指令少用一个周期,节省的总机器周期数=1T*N(迭代次数)=NT。,13,单操作数指令方案 LD #0,B STM #a,AR2 STM #x,AR3 STM #19,BRC RPTB done-1 LD *AR2+,T;1T MPY *AR3+,A;1T ADD A,B ;1T done:STH B,y STL B,

9、y+1,双操作数指令方案 LD #0,B STM #a,AR2 STM #x,AR3 STM #19,BRC RPTB done-1 MPY *AR2+,*AR3+,A;1T ADD A,B ;1T done:STH B,y STL B,y+1,14,在单个周期内同时利用C总线和D总线,得到32位操作数。,5长字运算,特 点,使用长操作数指令时,按指令中给出的地址存取的总是高16位操作数。这样,有两种数据排列方法: (1)偶地址排列法 指令中给出的地址为偶地址,存储器中低地址存放高16位操作数。 如: DLD *AR3+,A 执行前:A=00 0000 0000 执行后:A=00 6CAC B

10、D90 AR3=0100 AR3=0102 (0100h)=6CAC(高字) (0100h)=6CAC (0101h)=BD90(低字) (0101h)=BD90,总是高16位操作数,15,(2)奇地址排列法 指令中给出的地址为奇地址,存储器中低地址存放低16位操作数。 如: DLD *AR3-,A 执行前:A=00 0000 0000 执行后:A=00 BD90 6CAC AR3=0103 AR3=0101 (0102h)=6CAC(低字) (0100h)=6CAC (0103h)=BD90(高字) (0101h)=BD90 推荐采用偶地址排列法,将高16位操作数放在偶地址存储单元中。如:

11、程序存储器 .long 12345678 h ;偶地址:1234 ;奇地址:5678 数据存储器 .bss xhi, 2, 1, 1 ;偶地址:xhi ;奇地址:xlo 变量名称 字长 页邻接 偶地址排列法,总是高16位操作数,16,标准运算 LD xhi,16,A ADDS xlo,A ADD yhi,16,A ADDS ylo,A STH A,Zhi STL A,Zlo (6个字,6个T),长字运算 DLD xhi,A DADD yhi,A DST A,zhi (3个字,3个T),例5-9 计算Z32=X32+Y32。,17,(1)并行运算指同时利用D总线和E总线。其中,D总线用来执行加载

12、或算术运算,E总线用来存放先前的结果。 (2)并行指令都是单字单周期指令。 (3)并行运算时所存储的是前面的运算结果,存储之后再进行加载或算术运算。 (4)并行指令都工作在累加器的高位。 (5)大多数并行运算指令都受累加器移位方式ASM位影响。,6并行运算,特 点,18,表5-1 并行指令举例,19,例5-10 编写计算z=x+y和f=d+e的程序段。 在此程序段中用到了并行存储/加载指令,即在同一机器周期内利用E总线存储和D总线加载。 数据存储器分配如图5-4所示。 .title “cjy3.asm” .mmregs STACK .usect “STACK”,10H .bss x,3 ;为第

13、一组变量 ;分配3个存储单元 .bss d,3 ;为第二组变量 ;分配3个存储单元 .def start .data table: .word 0123H,1027H,0,1020H,0345H,0,20,.text start:STM #0,SWWSR STM #STACK+10H,SP STM #x,AR1 RPT #5 MVPD table,*AR1+ STM #x,AR5 ;将第一组变量的首地址传给AR5 STM #d,AR2 ;将第二组变量的首地址传给AR2 LD #0,ASM ;设置ASM=0 LD *AR5+,16,A ;将x的值左移16位放入A的高端字 ADD *AR5+,16

14、,A ;将y值左移16位与A的高端字x相加 ST A,*AR5 ;将A中的和值右移16位存入z中 LD *AR2+,B ;将d的值左移16位放入B的高端字 ADD *AR2+,16,B ;将e值左移16位与B的高端字d相加 STH B,*AR2 ;将B的高端字中的和值存入f中 end: B end .end,21,764位加法和减法运算,例5-11 编写计算Z64=W64+X64-Y64的程序段。 这里的W、X、Y和结果Z都是64位数,它们都由两个32位的长字组成。利用长字指令可以完成64位数的加/减法。 w3 w2 w1 w0 (W64) + x3 x2 C x1 x0 (X64) 低32位

15、相加产生进位C - y3 y2 C y1 y0 (Y64) 低32位相减产生借位C _ z3 z2 z1 z0 (Z64),累加器A,累加器B,22,DLD w1,A ;A=w1w0 DADD x1,A ;A=w1w0+x1x0, 产生进位C DLD w3,B ;B=w3w2 ADDC x2,B ;B=w3w2+x2+C ADD x3,16,B ;B=w3w2+x3x2+C DSUB y1,A ;A=w1w0+x1x0-y1y0, 产生借位C DST A,z1 ;z1z0=w1w0+x1x0-y1y0 SUBB y2,B ;B=w3w2+x3x2+C-y2-C SUB y3,16,B ;B=w3w2+x3x2+C-y3y2-C DST B,z3 ;z3z2=w3w2+x3x2+C-y3y2-C 由于没有长字带进(借)位加

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号