小命 dld @w1.A A=W,Wo DADD@x1,A;A=Ww+x1x,产生进位C dd @w3. B B=ww 2 ADDC @x2, B B=W3W2+x2+C Add @x3.16.b: B=W W.+x.x.+C DSUB@y1,A;A=Ww+x1x-y1yn产生借位C DST A@z1 :21Z0-W1WotX1Xoy1yo SUBB @y2, B s B=WW,+xax,+C-yo-C SUB @y3, 16,B B-=W3W2+xX2+C-y3y2-C DST B @z3 z3z2-W3W2+x3x2+C-y3y2-C 由于没有长字带进(借)位加/减法指令,所以上述程序 中只能用16位带进(借)位指令ADDC和SUBB
22 DLD @w1,A ;A=w1 w0 DADD @x1,A ;A=w1 w0 +x1 x0 , 产生进位C DLD @w3,B ;B=w3 w2 ADDC @x2,B ;B=w3 w2 +x2 +C ADD @x3,16,B ;B=w3 w2 +x3 x2 +C DSUB @y1,A ;A=w1 w0 +x1 x0 -y1 y0 , 产生借位C’ DST A,@z1 ;z1 z0 =w1 w0 +x1 x0 -y1 y0 SUBB @y2,B ;B=w3 w2 +x3 x2 +C-y2 -C’ SUB @y3,16,B ;B=w3 w2 +x3 x2 +C-y3 y2 -C’ DST B,@z3 ;z3 z2 =w3 w2 +x3 x2 +C-y3 y2 -C’ 由于没有长字带进(借)位加/减法指令,所以上述程序 中只能用16位带进(借)位指令ADDC和SUBB
小命 8.32位乘法运算 例5-12编写计算W=X2*Y32的程序段。 32位乘法算式如下: 数据存储器 XI XO S U × y1 yO S U AK2→[z0 X x0*y0 U *k U AR3→匚如 y1*x0 S U WU x1*y0 S* U 1*x1 S* S W2 W3 W3 W2 W1 W0 S UUU 图5-523
23 8. 32位乘法运算 x1 x0 S U × y1 y0 S U __________________ _____________ x0 * y0 U * U y1 * x0 S * U x1 * y0 S * U y1 * x1 S * S ________________ _______________ w3 w2 w1 w0 S U U U 例5-12 编写计算W64=X32*Y32的程序段。 32位乘法算式如下: 图5-5
小命 其中,S为带符号数,U为无符号数。数据存储器分配如 图5-5所示。在32位乘法运算中,实际上包括了三种乘法运算: UU、S和S*S。一般的乘法运算指令都是两个带符号数相乘, 即S米S。 所以,在编程时,要用到以下三条乘法指令: MACSU Xmem,Ymem,src;无符号数与带符号数相乘并累 加 src=U (Xmem)* S( Mem tsrc MPYU Smem, dst ;无符号数相乘 dst=U (T) *U( Smem MAC Xmem,Ymem,src;两个符号数数相乘并累加 src=S(Xmem)* S(Mem)+src 32位乘法的程序段如下: 24
24 其中,S为带符号数,U为无符号数。数据存储器分配如 图5-5所示。在32位乘法运算中,实际上包括了三种乘法运算: U*U、S*U和S*S。一般的乘法运算指令都是两个带符号数相乘, 即S*S。 所以,在编程时,要用到以下三条乘法指令: MACSU Xmem,Ymem,src ;无符号数与带符号数相乘并累 加 ; src=U ( Xmem ) * S ( Ymem ) +src MPYU Smem,dst ;无符号数相乘 ;dst=U(T)* U(Smem) MAC Xmem,Ymem,src ;两个符号数数相乘并累加 ;src=S(Xmem)* S(Ymem)+src 32位乘法的程序段如下:
小命 STM #xO. AR2 ;将x的首地址放入AR2 STM #y, ar3 ;将y的首地址存入AR3 LD AR2. T T=XO MPYU米AR3+,A A=uxO*uyO STL A,@w0 W0=uXO*uyO LD A,-16,A ;A=A>>16 MACSU*AR2+,米AR3-,A ;A+=y1*ux0 MACSU*AR3+,米AR2,A 9 A+=xl*uyO STL A,@w1 ;W1=A LD A,-16,A ;A=A>>16 MAC AR2,米AR3,A ;A+=x1米y1 STL A,@w2 ;w2=A的低16位 STH A,@W3 ;w3=A的高16位
25 STM #x0,AR2 ;将x的首地址放入AR2 STM #y0,AR3 ;将y的首地址存入AR3 LD *AR2,T ;T=x0 MPYU *AR3+,A ;A=ux0*uy0 STL A,@w0 ;w0=ux0*uy0 LD A,-16,A ;A=A>>16 MACSU *AR2+,*AR3-,A ;A+=y1*ux0 MACSU *AR3+,*AR2,A ;A+=x1*uy0 STL A,@w1 ;w1=A LD A,-16,A ;A=A>>16 MAC *AR2,*AR3,A ;A+=x1*y1 STL A,@w2 ;w2=A的低16位 STH A,@W3 ;w3=A的高16位
小命 9.小数运算 整数运算的问题 小数长”(这素味卡着装相菜,聚殺将会很快趣出 运算定点器件的数据范 与整 (2)保存32位乘积到存储器,要开销2个机 数运 器周期以及2个字的存储器单元。 (3)由于乘法器都是16位相乘,因此很难在 算的后续的递推运算中,将32位乘积作为乘法器的输 比较 小数运算的优点 乘积总是“向右增长”。这就味着超出 定点器件数据范围的将是不太感兴趣的部分。 (2)既可以存储32位乘积,也可以存储高16 位乘积,这就允许用较少的资源保存结果。26 (3)可以用于递推运算
26 9.小数运算 整数运算的问题 (1)两个16位整数相乘,乘积总是“向左增 长” 。这意味着多次相乘后,乘积将会很快超出 定点器件的数据范围。 (2)保存32位乘积到存储器,要开销2个机 器周期以及2个字的存储器单元。 (3)由于乘法器都是16位相乘,因此很难在 后续的递推运算中,将32位乘积作为乘法器的输 入。 小数运算的优点 (1)乘积总是“向右增长” 。这就味着超出 定点器件数据范围的将是不太感兴趣的部分。 (2)既可以存储32位乘积,也可以存储高16 位乘积,这就允许用较少的资源保存结果。 (3)可以用于递推运算。 小数 运算 与整 数运 算的 比较