DSP 技术及应用(3)

2020-05-09 09:23

例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 @b,A ;将A中的mx与b地址的内容相加, 结果送A STH A,@y ;将A的的计算结果存入y地址中 STL A,@y+1 ;将A的的计算结果存入y+1地址中 例5-6 将数组x[5] 初始化为{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个存储单元 .text ;定义代码段起始地址 START:STM #x,AR5 ;将x的首地址存入AR5

RPT #4 ;设置重复执行5次下条指令 MVPD TBL,*AR5+ ;将TBL开始的5个值传给x 例5-8 编制求解 的程序。

单操作数指令方案 双操作数指令方案 LD #0,B LD #0,B STM #a,AR2 STM #a,AR2 STM #x,AR3 STM #x,AR3 STM #19,BRC STM #19,BRC RPTB done-1 RPTB done-1

LD *AR2+,T;1T MPY *AR2+,*AR3+,A;1T MPY *AR3+,A;1T ADD A,B ;1T ADD A,B ;1T

done:STH B,@y done:STH B,@y STL B,@y+1 STL B,@y+1 例5-9 计算Z32=X32+Y32。

标准运算 长字运算

LD @xhi,16,A DLD @xhi,A ADDS @xlo,A DADD @yhi,A ADD @yhi,16,A DST A,@zhi ADDS @ylo,A (3个字,3个T) STH A,@Zhi STL A,@Zlo (6个字,6个T)

例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位相加产生进位C - y3 y2 C’ y1 y0 (Y64) 低32位相减产生借位C’ __________________________________ z3 z2 z1 z0 (Z64) 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’

由于没有长字带进(借)位加/减法指令,所以上述程序中只能用16位带进(借)位指令ADDC和SUBB。

例5-13 编制计算 的程序段,其中数据均为小数:a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8, x2=0.6,x3=-0.4,x4=-0.2。 .title “cjy4.asm” .mmregs

STACK .usect “STACK”,10H

.bss a,4 ;为a分配4个存储单元 .bss x,4 ;为x分配4个存储单元 .bss y,1 ;为结果y分配1个存储单元 .def start

.data ;定义数据代码段 table: .word 1*32768/10 ;在table开始的8个 .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 ;定义可执行程序代码段

start:SSBX FRCT ;设置FRCT位,表示进行小数乘 STM #x,AR1 ;将x的首地址传给AR1 RPT #7 ;重复8次下条指令

MVPD table,*AR1+ ;将程序空间8个数传给数据存储器

STM #x,AR2 ;将数据存储器第一个数x1的地址传给AR2 STM #a,AR3 ;将数据存储器第五个数a1的地址传给AR3 RPTZ A,#3 ;将A清零,重复4次下条指令

MAC *AR2+,*AR3+,A ;执行乘法累加和,结果放在A中

STH A,@y ;将A的高端字存入结果y,低端字省去 end: B end ;原处循环等待 .end

结果y=0x1EB7。转换为十进制数:

y=(1×163+14×162+11×161+7×160)/32768=0.24 例5-14 编写0.4÷(-0.8)的程序段。 .title “cjy5.asm” .mmregs

STACK .usect “STACK”,10H

.bss num,1 ;为分子分配单元 .bss den,1 ;为分母分配单元 .bss quot,1 ;为商分配单元

.data ;定义数据段起始地址

table:.word 4*32768/10 ;在以table为地址的单元放入 0.4

.word -8*32768/10 ;在以table为地址的下一单元放入-0.8 .def start

.text ;定义数据段起始地址

start: STM #num,AR1 ;将分子所在单元的地址传给AR1 RPT #1 ;重复执行下一指令2次

MVPD table,*AR1+;传送程序空间的2个数据(分子、分母)至地址为 num开始的数据存储器单元

LD @den,16,A ;将分母移到累加器A(31~16) MPYA @num ;(num)*( A(31~16))→B,获取商的符号(在累加器B中)

ABS A ;分母取绝对值

STH A,@den ;分母绝对值存回原处 LD @num,16,A ;分子加载到A(31~16) ABS A ;分子取绝对值

RPT #14 ;15次减法循环,完成除法 SUBC @den,A ;

XC 1,BLT ;如果B<0(商是负数),则需要变号 NEG A ;如果B<0执行求反,否则跳过此指令 STL A,@quot ;保存商 end: B end .end


DSP 技术及应用(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏东剧变的原因及对我国的启示

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: