第7章汇编语言程序课件.ppt

上传人(卖家):晟晟文业 文档编号:3859242 上传时间:2022-10-19 格式:PPT 页数:171 大小:815.02KB
下载 相关 举报
第7章汇编语言程序课件.ppt_第1页
第1页 / 共171页
第7章汇编语言程序课件.ppt_第2页
第2页 / 共171页
第7章汇编语言程序课件.ppt_第3页
第3页 / 共171页
第7章汇编语言程序课件.ppt_第4页
第4页 / 共171页
第7章汇编语言程序课件.ppt_第5页
第5页 / 共171页
点击查看更多>>
资源描述

1、第第7章章 汇编语言程序设计汇编语言程序设计n7.1 程序流程控制程序流程控制n7.2 数据块传送数据块传送n7.3 定点数的基本算术运算定点数的基本算术运算n7.4 长字运算和并行运算长字运算和并行运算n7.5 FIR滤波器的滤波器的DSP实现实现n7.6 IIR数字滤波器的数字滤波器的DSP实现实现n7.7 FFT运算的运算的DSP实现实现7.1 程序流程控制程序流程控制n7.1.1 程序存储器地址生成程序存储器地址生成n7.1.2 条件操作条件操作n7.1.3 分支转移分支转移n7.1.4 调用与返回调用与返回n7.1.5 重复操作重复操作n7.1.6 TMS320C54x中断系统中断系

2、统n7.1.7 堆栈的使用堆栈的使用返回首页7.1.1 程序存储器地址生成程序存储器地址生成 程序存储器中存放指令代码、参数表和立即数。程序程序存储器中存放指令代码、参数表和立即数。程序地址产生逻辑(地址产生逻辑(PAGEN),),包括以下包括以下5个寄存器(如图个寄存器(如图7-1所示):所示):程序计数器(程序计数器(PC););重复计数器(重复计数器(RC););块重复计数器(块重复计数器(BRC););块重复起始地址寄存器(块重复起始地址寄存器(RSA););块重复结束地址寄存器(块重复结束地址寄存器(REA)。)。图7-1 程序地址产生逻辑(PAGEN)寄存器返回本节7.1.2 条件

3、操作条件操作表7-1 条件指令中的各种条件操作符号条 件说 明操作符号条 件说 明AEQA=0累加器A等于0 AOVAOV=1 累加器A溢出 BEQB=0累加器B等于0 BOVBOV=1 累加器B溢出 ANEQA 0累加器A不等于0 ANOVAOV=0 累加器A不溢出 BNEQB 0累加器B不等于0 BNOVBOV=0 累加器B不溢出 ALTA0累加器A小于0 CC=1ALU进位位置1 BLTB0累加器A大于0 BIOBIO低 BIO信号电平为低 BGTB0累加器B大于0 NBIOBIO高 BIO信号电平为高 AGEQA 0累加器A大于等于0 UNC无无条件操作 BGEQB 0累加器B大于等于

4、0 表7-2 多条件指令中的条件组合返回本节第1组第2组A类B类A类B类C类 EQ NEQ LEQ GEQ LT GTOVNOVTCNTCCNCBIONBIO7.1.3 分支转移分支转移分支转移指令 分 类 指 令 说 明 无条件分支转移 BD 用该指令指定的地址加载PC BACCD 用累加器的低16位指定的地址加载PC 条 件分支转移 BCD 若满足指令给定条件,用该指令指定的地址加载PC BANGD 若当前选择辅助寄存器不等于0,用该指令指定的地址加载PC 远 程分支转移 FBD 用该指令指定的地址加载PC和XPC FBACCD 用累加器的低23位指定的地址加载PC和XPC 7.1.4 调

5、用与返回调用与返回子程序调用指令 分 类 指 令 说 明 无条件调用 CALLD 将返回的地址压入堆栈,并用该指令指定的地址加载PC CALAD 将返回的地址压入堆栈,用累加器A或B指定的地址加载PC 条件调用 CCD 如果满足指令给定条件,将返回的地址压入堆栈,并用该 指令指定的地址加载PC远程调用 FCALL D 将XPC和PC压入堆栈,并用该指令指定的地址加载PC和XPC FCALA D 将XPC和PC压入堆栈,用累加器的低23位指定的地址加载 PC和XPC 子程序返回指令 分 类 指 令 说 明 无条件返回 RETD 将堆栈顶部的返回地址加载到PC。RETED 将堆栈顶部的返回地址加载

6、到PC,并使能可屏蔽中断。RETFD 将RTN寄存器中的返回地址加载到PC,并使能可屏蔽中断。条件返回 RCD 如果满足指令给定条件,将堆栈顶部的返回地址加载到PC。远程返回 FCALL D 将堆栈顶部的值弹出加载到XPC,将堆栈中下一个值弹出加载到PC。FCALA D 将堆栈顶部的值弹出加载到XPC,将堆栈中下一个值弹出加载到PC,并使能可屏蔽中断。7.1.5 重复操作重复操作7.1.6 TMS320C54x中断系统中断系统1中断类型中断类型n C54x支持软件中断和硬件中断。软件中断由程序指支持软件中断和硬件中断。软件中断由程序指令产生(令产生(INTR、TRAP或或RESET)。)。硬件

7、中断由设备的硬件中断由设备的一个信号产生,包括两种类型:一个信号产生,包括两种类型:外部硬件中断由外部中断口的信号触发;外部硬件中断由外部中断口的信号触发;内部硬件中断由片内外设的信号触发。内部硬件中断由片内外设的信号触发。软件中断不分优先级,硬件中断有优先级软件中断不分优先级,硬件中断有优先级,其中,其中,1为为最高优先级。最高优先级。无论是硬件中断还是软件中断,都属于以下两种类型:无论是硬件中断还是软件中断,都属于以下两种类型:(1)可屏蔽中断)可屏蔽中断(2)非屏蔽中断)非屏蔽中断 可屏蔽中断可屏蔽中断:是可用软件来屏蔽或开放的中断,即通是可用软件来屏蔽或开放的中断,即通过对中断屏蔽寄存

8、器过对中断屏蔽寄存器(IMR)(IMR)中的相应位和状态寄存器中的相应位和状态寄存器(ST1)(ST1)中的中断允许控制位中的中断允许控制位INTMINTM编程来屏蔽或开放该编程来屏蔽或开放该中断。中断。TMS320C54xTMS320C54x最多可以支持最多可以支持1616个用户可屏蔽中个用户可屏蔽中断断(SINT15(SINT15SINT0)SINT0),但有的处理器只用了其中的一,但有的处理器只用了其中的一部分。有些中断有两个名称。部分。有些中断有两个名称。非可屏蔽中断非可屏蔽中断:是不能用软件来屏蔽的中断,不受是不能用软件来屏蔽的中断,不受IMRIMR和和INTMINTM位的影响。位的

9、影响。TMS320C54xTMS320C54x对这一类中断总是对这一类中断总是响应的,并从主程序转移到中断服务程序。响应的,并从主程序转移到中断服务程序。表7-9 C5402中断源的中断向量及硬件中断优先权15 141312111098保 留DMAC5DMAC4BXINT1BRINT1HPINTINT376543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT015 141312111098保 留DMAC5DMAC4BXINT1BRINT1HPINTINT376543210TINT1DMAC0BXINT0BRINT0TINT0INT2INT1INT0接受中断请

10、求是可屏蔽中断吗?INTM=0?IMR 屏蔽位=1?是硬件中断或INTR指令中断吗?响应中断,发出 信号 IACKPC 保存到软件堆栈执行中断服务程序中断返回,恢复PC继续执行主程序INTM 位置1否是是是否是否否中断向量号左移两位后中断向量地址图7-3 中断向量地址的产生返回本节.mmregs .def _c_int00STACK .usect STACK,100ht0_cout.usect vars,1;计数器计数器 t0_flag.usect “vars”,1;当前当前XF输出电平标志。输出电平标志。t0_flag=1,则则XF=1;;t0_flag=0,则,则XF=0TVAL.set1

11、639;1640(10(61=1ms,又因中断程序中计数器初值又因中断程序中计数器初值 ;t0_cout=1000,所以定时时间:,所以定时时间:1ms(1000=1sTIM0.set0024H;定时器定时器0寄存器地址寄存器地址PRD0.set0025HTCR0.set0026H.data TIMES.int TVAL;定时器时间常数定时器时间常数.text 中断矢量表程序举例中断矢量表程序举例 汇编程序文件汇编程序文件(timers.asm)如下:如下:*;中断矢量表程序段中断矢量表程序段_c_int00b startnopnopNMIrete ;非屏蔽中断非屏蔽中断nopnopnopSI

12、NT17.space 4*16 ;各软件中断各软件中断SINT18.space 4*16SINT19.space 4*16SINT20.space 4*16SINT21.space 4*16SINT22.space 4*16SINT23.space 4*16SINT24.space 4*16SINT25.space 4*16SINT26.space 4*16SINT27.space 4*16SINT28.space 4*16SINT29.space 4*16SINT30.space 4*16INT0rsbx intm ;外中断外中断0中断中断retenopnopINT1rsbx intm ;外

13、中断外中断1中断中断retenopnopINT2rsbx intm ;外中断外中断2中断中断retenopnopTINT:bd timer ;定时器中断向量定时器中断向量nopnopnopRINT0:rete;串口串口0接收中断接收中断nopnopnopXINT0:rete;串口串口0发送中断发送中断nopnopnop SINT6.space 4*16;软件中断软件中断SINT7.space 4*16;软件中断软件中断INT3:rete;外中断外中断3中断中断nopnopnop HPINT:rete ;主机中断主机中断nopnopnop RINT1:rete ;串口串口1接收中断接收中断nop

14、nopnopXINT1:rete ;串口串口1发送中断发送中断nopnopnop*start:LD#0,DP STM#STACK+100h,SP STM#07FFFh,SWWSR STM#1020h,PMST;计数器设置为计数器设置为 1000(1s)ST#1000,*(t0_cout)SSBX INTM;关全部中断关全部中断 LD#TIMES,A READA TIM0 ;初始化初始化 TIM,PRD READA PRD0 STM#669h,TCR0;初始化初始化TCR0;初始化初始化 IMR,使能使能 timer0 中断中断 STM#8,IMR RSBX INTM ;开放全部中断开放全部中断

15、WAIT:B WAIT*;定时器定时器0中断服务子程序中断服务子程序timer:ADDM#-1,*(t0_cout);计数器减计数器减1 .RETE .end7.1.7 堆栈的使用堆栈的使用 堆栈被用于保存中断程序、调用子程序的返堆栈被用于保存中断程序、调用子程序的返回地址,也用于保护和恢复用户指定的寄存器和回地址,也用于保护和恢复用户指定的寄存器和数据,还可用于程序调用时的参数传递。返回地数据,还可用于程序调用时的参数传递。返回地址是由址是由DSP自动保存的。自动保存的。用户编写的压栈指令和出栈指令将指定的内用户编写的压栈指令和出栈指令将指定的内容压入和弹出堆栈,容压入和弹出堆栈,SP总是指

16、向最后压入堆栈的总是指向最后压入堆栈的数据,压栈之前数据,压栈之前SP减减1,出栈之后,出栈之后SP加加1。C54x支持软件堆栈,在用户指定的存储区开支持软件堆栈,在用户指定的存储区开辟一块存储区作为堆栈存储器。堆栈的定义及初辟一块存储区作为堆栈存储器。堆栈的定义及初始化步骤为:始化步骤为:1)声明具有适当长度的未初始化段;)声明具有适当长度的未初始化段;2)将堆栈指针指向栈底;)将堆栈指针指向栈底;3)在链接命令文件)在链接命令文件(.cmd)中将堆栈段放入中将堆栈段放入内部数据存储区。内部数据存储区。返回本节数据RAMDDDDDSPD数据RAMAR4DBF8DBF8DBF8DBF8DBF8

17、SPDBF87.2 数据块传送数据块传送1 1编写汇编源程序为编写汇编源程序为 .mmregs .def _c_int00 .dataTBL:.word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1PROM:.usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA:.usectDATA,20 .text_c_int00 b start nop nopstart:STM#a,AR1;a20=0,1,2,3,4,5

18、,6,7,8,9,10,;11,12,13,14,15,16,17,18,19 RPT#39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+;1,1,1,1,1,1,1,1,1,1 STM#x,AR2;将数据存储器中的数组将数据存储器中的数组x20复制到数组复制到数组y20 STM#y,AR3 RPT#19 MVDD*AR2+,*AR3+STM#a,AR1;将数据存储器中的将数据存储器中的a20写入到程序存储器写入到程序存储器PROM LD#PROM,A STM#19,AR3LOOPP:WRITA *AR1+ADD#1,A,A BANZ LOOPP,*AR3-L

19、D#PROM-1,A ;读程序存储器读程序存储器PROM中中20个数据存入个数据存入DATA STM#DATA,AR1 ST#19,BRC RPTB LOOP2 ADD#1,A,ALOOP2:READA *AR1+;该指令为单字指令该指令为单字指令WAIT:NOP B WAIT2 2建立汇编源程序建立汇编源程序n点 击点 击 CCS C5000图标,进入图标,进入 CCS环境,再点 击环境,再点 击FileNewSource File菜单命令,打开一个空白文档,菜单命令,打开一个空白文档,将汇编源程序逐条输入。将汇编源程序逐条输入。n单击单击FileSave菜单命令,出现如图菜单命令,出现如图

20、7-5所示的窗口,选所示的窗口,选择择D:Program Filesti myprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为Assembly Source Files(*.asm),),单击单击“保存保存”按钮,按钮,以上汇编程序被存盘。以上汇编程序被存盘。3 3建立链接命令文件建立链接命令文件n点击点击FileNewSource File菜单命令,打开一个空白菜单命令,打开一个空白文档,逐条输入链接命令文件。文档,逐条输入链接命令文件。mymove.obj -o mymove.out -m mymove.ma

21、p MEMORY PAGE 0:RAM:origin=1000h,length=800h RAM1:origin=2000h,length=300h PAGE 1:DARAM1:origin=0100h,length=100h DARAM2:origin=0200h,length=100h SECTIONS.data :RAM PAGE 0.text :RAM PAGE 0 PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1 DATA:DARAM2 PAGE 1n点击点击FileSave菜单命令,如图菜单命令,如图7-5所示,选择所示,选择D:Program Filestim

22、yprojcetsmymove子目录,在子目录,在“文件名文件名”一栏中输入一栏中输入mymove,并选择保存类型为并选择保存类型为TI Command Language File(*.cmd),),单击单击“保存保存”按按钮,以上链接命令程序被存盘。钮,以上链接命令程序被存盘。4 4创建一个新工程创建一个新工程n在在Project菜单中选择菜单中选择New项,弹出项,弹出Project Creation(工程创建)窗口,如图工程创建)窗口,如图7-6所示。在所示。在Project一栏键入一栏键入mymove,然后单击然后单击“完成完成”按按钮,钮,CCS将创建一个名为将创建一个名为mymov

23、e.pjt的工程,的工程,此文件保存了工程的设置信息及工程中的文件引此文件保存了工程的设置信息及工程中的文件引用情况。用情况。图7-5 保存汇编源程序 图7-6 工程创建窗口5 5将有关文件添加到工程中将有关文件添加到工程中n从从Project菜单中选取菜单中选取Add Files to Project命令,命令,选择文件选择文件mymove.asm,双击将双击将mymove.asm添加到工程中。添加到工程中。n点击点击ProjectAdd Files to Project菜单命令,菜单命令,将将mymove.cmd添加到工程文件中。添加到工程文件中。n逐层打开如图逐层打开如图7-7所示。双击

24、所示。双击mymove.asm打开文打开文件,可以观察和修改件,可以观察和修改mymove.asm文件的内容。文件的内容。6汇编、编译和链接产生汇编、编译和链接产生.out文件文件n点击点击Project菜单中的菜单中的Rebuild All。请注意在监请注意在监视窗口显示的汇编、编译和链接的相关信息。如视窗口显示的汇编、编译和链接的相关信息。如果没有错误,将产生果没有错误,将产生mymove.out文件;如果有文件;如果有错,在监视窗口以红色字体显示出错行,用鼠标错,在监视窗口以红色字体显示出错行,用鼠标双击该行,光标跳将至源程序相应的出错行。修双击该行,光标跳将至源程序相应的出错行。修改错

25、误后,重新汇编、链接。改错误后,重新汇编、链接。7加载并运行加载并运行.out文件文件n执行菜单命令执行菜单命令FileLoad Program,选择选择mymove.out并打开,将并打开,将Rebuild All生成的程序生成的程序加载到加载到DSP中。中。CCS将自动打开一个反汇编窗口,将自动打开一个反汇编窗口,显示加载程序的反汇编指令。显示加载程序的反汇编指令。n点击点击DebugRun菜单命令运行程序,单步执行菜单命令运行程序,单步执行程序则点击程序则点击DebugStepInto菜单命令,或按菜单命令,或按F8键。键。8观察运行结果观察运行结果n点击点击ViewMemory菜单命令

26、,将出现如图菜单命令,将出现如图7-8所示的选项窗口,将所示的选项窗口,将Address改为改为0 x0100,单击单击OK按钮,将在汇编窗口显示选定的数据空间的按钮,将在汇编窗口显示选定的数据空间的内容。内容。n当结果数据错误时,可检查源程序并进行修改。当结果数据错误时,可检查源程序并进行修改。修改完毕,可重新汇编、链接,再加载运行修改完毕,可重新汇编、链接,再加载运行.out文件,直到结果正确。文件,直到结果正确。返回本节7.3 定点数的基本算术运算定点数的基本算术运算n7.3.1 加法、减法和乘法运算加法、减法和乘法运算n7.3.2 定点除法运算定点除法运算返回首页7.3.1 加法、减法

27、和乘法运算加法、减法和乘法运算表7-10 Q表示、S表示及数值范围图7-9 DSP定点运算中小数的表示2 21616位定点加法和位定点加法和1616位定点减法位定点减法n C54x中提供了多条用于加法的指令,如中提供了多条用于加法的指令,如ADD、ADDC、ADDM和和ADDS。其中,其中,ADDS用于无符号数的加法运算,用于无符号数的加法运算,ADDC用于带进位的加法运算而用于带进位的加法运算而ADDM专用于立即数的加专用于立即数的加法。法。n C54x中提供了多条用于减法的指令,如中提供了多条用于减法的指令,如SUB、SUBB、SUBC和和SUBS。其中,其中,SUBS用于无符号数的用于无

28、符号数的减法运算,减法运算,SUBB用于带进位的减法运算,而用于带进位的减法运算,而SUBC为条为条件减法指令。件减法指令。n 注意:注意:在做加、减运算时,如果两个操作数的定标不在做加、减运算时,如果两个操作数的定标不一样,在运算前要进行小数点的调整,为保证运算精度,一样,在运算前要进行小数点的调整,为保证运算精度,需要使需要使Q值小的数调整为与另一个数的值小的数调整为与另一个数的Q值一样大。值一样大。【例例7-8】x=5.625,y=-0.625,求,求x+y。解解:x=5.625,采用,采用Q3.12格式表示的十六格式表示的十六进制码为进制码为5A00H;y=-0.625,采用,采用Q.

29、15格式表示的十六进制码格式表示的十六进制码为为B000H。将将y表示为表示为Q3.12格式时,将它右移格式时,将它右移3位,因位,因为是负数,所以整数部分符号位扩展后结果为为是负数,所以整数部分符号位扩展后结果为F600H。将。将F600H加到加到5A00H上,结果为上,结果为5000H,x+y的的Q3.12格式的值等于格式的值等于5。3 31616位定点整数乘法位定点整数乘法nC54x中提供了大量的乘法运算指令,其结果都是中提供了大量的乘法运算指令,其结果都是32位,放在累加器位,放在累加器A或或B中。乘数在中。乘数在C54x的乘法的乘法指令中很灵活,可以是指令中很灵活,可以是T寄存器、立

30、即数、存储寄存器、立即数、存储单元和累加器单元和累加器A或或B的高的高16位。在位。在C54x中,一般中,一般对数据的处理都当做有符号数,如果是无符号数对数据的处理都当做有符号数,如果是无符号数相乘,使用相乘,使用MPYU指令,这是一条专门用于无符指令,这是一条专门用于无符号数乘法运算的指令,其他指令都是有符号数的号数乘法运算的指令,其他指令都是有符号数的乘法。乘法。4 4Q15Q15定点小数乘法运算定点小数乘法运算n两个两个16位整数相乘,乘积总是位整数相乘,乘积总是“向左增长向左增长”,这,这就意味着多次相乘后乘积将会很快超出定点器件就意味着多次相乘后乘积将会很快超出定点器件的数据范围。而

31、且要将的数据范围。而且要将32位乘积保存到数据存储位乘积保存到数据存储器,就要耗费两个机器周期以及两个字的程序和器,就要耗费两个机器周期以及两个字的程序和RAM单元。然而,两个单元。然而,两个Q15的小数相乘,乘积总的小数相乘,乘积总是是“向右增长向右增长”,这就意味着超出定点器件数据,这就意味着超出定点器件数据范围的将是不太感兴趣的部分。范围的将是不太感兴趣的部分。5混合表示法混合表示法 有些情况下,运算过程中为了既满足数值的有些情况下,运算过程中为了既满足数值的动态范围又保证一定的精度,必须采用动态范围又保证一定的精度,必须采用Q0与与Q15之间的表示方法。之间的表示方法。例如:例如:数值

32、数值1.125显然用显然用Q15格式无法表示,格式无法表示,而若用而若用Q0格式表示,则最接近的数是格式表示,则最接近的数是1,精度无,精度无法保证。因此,数法保证。因此,数1.125最佳的表示法是最佳的表示法是Q14格式。格式。返回本节n 例如:例如:1.1251.5=1.6875。n 01.00100000000000 (1.125);Q14n01.10000000000000 (1.5);Q14n 0001.1011000000000000000000000000=1.6875 ;Q280001.1011000000000000000000000000001.10110000000000

33、000000000000000001.1011000000000n 由于由于Q14的最大值不大于的最大值不大于2,因此,因此,2个个Q14数相乘得到的乘数相乘得到的乘积不大于积不大于4,理论上用,理论上用Q13表示乘积。由于表示乘积。由于1.6875不大于不大于2,所,所以还可以将以还可以将16位积左移一位后用位积左移一位后用Q14表示。表示。01.10110000000000 .title suanshu.asm.mmregs .def start,_c_int00 .bss x1,1.bss x2,1 .bss y1,1.bss y2,1 .bss z1,1.bss z2,1.bss z3

34、_h,1.bss z3_l,1.bss z4,1 v1.set 014H ;20-x1 v2 .set 036H ;54-y1 v3.set 04000H ;0.5(fraction)-x2 v4.set 00b548H ;-0.5837(fraction)-y2【例例7-9】使用使用C54X汇编语言编程计算汇编语言编程计算z1=x1+y1、z2x1-y1、z3=x1y1、z4=x2y2。_c_int00b start nopnop start:LD#x1,DP ST#v1,x1 ST#v2,y1;*test ADD*LDx1,A ;load x1-A ADDy1,A ;A+y1-A STL

35、A,z1 ;save A(low 16 bits)-z1NOP;*test SUB*LDx1,ASUB y1,ASTLA,z2NOP;*test MPY(integer)*RSBX FRCT ;准备整数乘法准备整数乘法 LD x1,T ;x1 -T MPY y1,A ;x1*y1-A(result is 32 bit)STH A ,z3_h ;乘法结果高乘法结果高16位在位在 z3_h单元中单元中 STLA ,z3_l ;乘法结果低乘法结果低16位在位在z3_l单元中单元中 NOP ST#v3,x2 ST#v4,y2 ;*test MPY(fraction)*;*0.5*(-0.58374)=

36、-0.29187(0 x0daa4)*SSBX FRCT ;准备小数乘法准备小数乘法 LD x2,16,A ;load x2 into A(high 16 bits)MPYA y2;x2*y2-B,and y2-T STHB,z4 ;结果在结果在 z4 单元中单元中 nop end:B end【例例7-10】使用双操作数指令编程计算使用双操作数指令编程计算y=。iiixa41;*编制计算小数乘法运算的程序段。其中数据均为小数编制计算小数乘法运算的程序段。其中数据均为小数*;*a1=0.1 a2=0.2 a3=-0.3 a4=0.4*;*x1=0.8 x2=0.6 x3=-0.4 x4=-0.2

37、*.mmregs .def start,_c_int00 .bss x,4 .bss a,4 .bss y,1 .datatable:.word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word-2*32768/10 .text _c_int00b start nopnop start:SSBX FRCT STM#0,SWWSR STM#x,AR1 RPT#7 MVPD table,*AR1+STM#x,

38、AR2 STM#a,AR3 STM#y,AR4 RPTZ A,#3 MAC *AR2+,*AR3+,A STH A,*AR4 done:B done.endn除法一般用有规律的减法去做,如:除法一般用有规律的减法去做,如:0 0 0 0 1 1 商商30011 0 0 0 0 1 0 1 0 被除数被除数10 0 0 0 0 除数除数3 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 1被除数位置不动被除数位置不动商位置不动商位置不动除数右移除数右移n 现设累加器为现设累加器为8位,高字、低字各用位,高

39、字、低字各用4位表示,来说明位表示,来说明10/3的实现过程。的实现过程。n(1)除数的最低有效位对齐被除数的最高有效位(除数左移除数的最低有效位对齐被除数的最高有效位(除数左移3位)后相位)后相减:减:n 00001010n -00011000 n 11110010n(2)不够减,放弃结果,将被除数左移一位再减:)不够减,放弃结果,将被除数左移一位再减:n 00010100n -00011000 n 11111100n(3)不够减,放弃结果,将被除数左移一位再减:)不够减,放弃结果,将被除数左移一位再减:n 00101000n -00011000 n 00010000n(4)够减,将结果左移

40、一位后加)够减,将结果左移一位后加1,再做最后一次减:,再做最后一次减:n 00100001n -00011000 n 00001001n(5)够减果,将结果左移一位加)够减果,将结果左移一位加1得到最后结果:得到最后结果:00010011,即商,即商为为0011=3(低(低4位),余数为位),余数为0001=1(高(高4位)位)数据存储器分子分母商:0.4-0.8AR1num0.4-0.8quot0.4:-0.8商-0.80.4数据存储器AR1quot0.8-0.5被除数 除 数 商(十六进制)商(十进制)4*32 768/100(0.4)-8*32 768/100(-0.8)0 xC000

41、-0.5-128 1 024 0 xF000-0.125 被除数 除 数 商(十六进制)商(十进制)16 384 512 0 xC020 32 66*32 768/100(0.66)-33*32 768/100(-0.33)0 xFFFE-2 .title chuf.asm .mmregs .def start,_c_int00 .bss num,1 .bss den,1 .bss quot,1 .datatable .word 4*32768/10 ;0.4 .word -8*32768/10 ;-0.8 .text _c_int00 b start nop nop【例例7-11】编写编写0

42、.4(-0.8)的程序。的程序。start:STM#num,AR1 RPT#1 MVPD table,*AR1+;传送传送2个数据至分子、分母单元个数据至分子、分母单元 STM#den,AR1 LD *AR1-,16,A ;将分母移到累加器将分母移到累加器A(31-16)MPYA *AR1+;(num)*(A(32-16)-B,获取商的符号,获取商的符号 ;(在累加器在累加器B中中)ABS A ;分母取绝对值分母取绝对值 STH A,*AR1-;分母绝对值存回原处分母绝对值存回原处 LD *AR1+,16,A ;分子分子-A(32-16)ABS A ;分子取绝对值分子取绝对值 RPT#14 ;

43、15次减法循环次减法循环,完成除法完成除法 SUBC *AR1,A XC 1,BLT ;如果如果BRAM .text:RAM PAGE 0PAGE 0 .data:RAM .data:RAM PAGE 0PAGE 0 .bss :DARAM1 PAGE 1 .bss :DARAM1 PAGE 1 【例例7-13】编写计算编写计算W64=X64+Y64-Z64的程序的程序 .title ADDSUB64 .title ADDSUB64.mmregs.mmregs.def start,_c_int00.def start,_c_int00.bss.bss x1,2,1,1x1,2,1,1.bss.

44、bss x3,2,1,1x3,2,1,1.bss.bss y1,2,1,1y1,2,1,1.bss.bss y3,1y3,1.bss.bss y2,1y2,1.bss.bss z1,2,1,1z1,2,1,1.bss.bss z3,1z3,1.bss.bss z2,1z2,1.bss.bss w1,2,1,1w1,2,1,1.bss.bss w3,2,1,1w3,2,1,1 table.long12345678H table.long12345678H;x1x0;x1x0.long.long 02468ACEH02468ACEH;x3x2;x3x2 .long .long22222222H22

45、222222H;y1y0;y1y0.word 1357H,2468H.word 1357H,2468H;y3,y2;y3,y2.long.long44444444H44444444H;z1z0;z1z0.word 1020H,0B30AH.word 1020H,0B30AH;z3,z2;z3,z2 .text .text _c_int00_c_int00b start b start nopnopnopnopstart:LD start:LD#x1,DP#x1,DPSTMSTM#x1,AR1#x1,AR1RPTRPT#11#11MVPDMVPDtable,table,*AR1+AR1+DLD

46、DLD x1,A x1,A;A=X1 X0;A=X1 X0DADD DADD y1,A y1,A;A=X1 X0+Y1 Y0,;A=X1 X0+Y1 Y0,产生进位产生进位C CDLD DLD x3,B x3,B;B=X3 X2;B=X3 X2 ADDCy2,B;B=X3 X2+00 Y2+C ADD y3,16,B ;B=X3 X2+Y3 Y2+C DSUBz1,A;A=X1 X0+Y1 Y0-Z1Z0,产生借位,产生借位C DST A,w1;W1W0=X1 X0+Y1 Y0-Z1Z0 SUBBz2,B;B=X3 X2+Y3 Y2+C-00 Z2-C SUBz3,16,B;B=X3 X2+Y

47、3 Y2+C-Z3 Z2-C DST B,w3;W3 W2=X3 X2+Y3 Y2+C-Z3 Z2-CEND:B END.end【例例7-14】编写编写32位整数乘法运算:位整数乘法运算:W64=X32Y32的程序的程序RAMx0 x1y0y1w0w1w2w3xyzdef7.5 FIR滤波器的滤波器的DSP实现实现n7.5.1 线性缓冲区法线性缓冲区法n7.5.2 循环缓冲区法循环缓冲区法n7.5.3 系数对称系数对称FIR滤波器的滤波器的DSP实现实现返回首页n数字滤波是数字滤波是DSP的最基本应用,利用的最基本应用,利用MAC(乘、乘、累加)指令和循环寻址可以方便地完成滤波运算。累加)指令

48、和循环寻址可以方便地完成滤波运算。两种常用的数字滤波器:两种常用的数字滤波器:FIR(有限冲激响应)有限冲激响应)滤波器和滤波器和IIR(无限冲激响应)滤波器的无限冲激响应)滤波器的DSP实现。实现。n设设FIR滤波器的系数为滤波器的系数为h(0),h(1),.,h(N-1),X(n)表示滤波器在表示滤波器在n时刻的输入,则时刻的输入,则n时刻的输出时刻的输出为:为:1N0i)in(x)i(h)1N(nx)1N(h)1n(x)1(h)n(x)0(h)n(y(7-1)n其对应的滤波器传递函数为:其对应的滤波器传递函数为:n如图如图7-10所示为横截型(又称直接型或卷积型)所示为横截型(又称直接型

49、或卷积型)FIR数字滤波器的结构图。数字滤波器的结构图。i1N0iz)i(h)z(Hx(n)Z-1Z-1Z-1h(0)h(1)h(2)h(N-2)h(N-1)y(n)图7-10 横截型FIR数字滤波器的结构图(7-2)n线性缓冲区法又称延迟线法。其方法是:对于线性缓冲区法又称延迟线法。其方法是:对于n=N的的FIR滤波器,在数据存储器中开辟一个滤波器,在数据存储器中开辟一个N单单元的缓冲区,存放最新的元的缓冲区,存放最新的N个样本;滤波时从最个样本;滤波时从最老的样本开始,每读一个样本后,将此样本向下老的样本开始,每读一个样本后,将此样本向下移位;读完最后一个样本后,输入最新样本至缓移位;读完

50、最后一个样本后,输入最新样本至缓冲区的顶部。冲区的顶部。n以上过程,可以用以上过程,可以用N=6的线性缓冲区示意图来说的线性缓冲区示意图来说明,如图明,如图7-11所示所示 7.5.1 线性缓冲区法线性缓冲区法图7-11 N=6的线性缓冲区示意图返回本节7.5.2 循环缓冲区法循环缓冲区法n图图7-12说明了使用循环寻址实现说明了使用循环寻址实现FIR滤波器的方滤波器的方法。对于法。对于N级级FIR滤波器,在数据存储区开辟一个滤波器,在数据存储区开辟一个称为滑窗的具有称为滑窗的具有N个单元的缓冲区,滑窗中存放个单元的缓冲区,滑窗中存放最新的最新的N个输入样本值。每次输入新的样本时,个输入样本值

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第7章汇编语言程序课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|