ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:79.29KB ,
资源ID:19420874      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19420874.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(运用TMS320C54x汇编语言编写定点数运算浮点数运算程Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

运用TMS320C54x汇编语言编写定点数运算浮点数运算程Word格式.docx

1、不需要左移一位。 DSP 处理器带有可选的自动左移一位的功能,消除移位操作的时间开销。定点数的除法运算除法是乘法的逆运算, 包括一系列移位和条件减法运算, 需要用除法子程序实现。 大多 数 DSP 处理器不提供单周期除法指令。如果除法运算中包含负数,应将负数变换为等值的正 数,然后作除法运算,最后加上正确的符号。下面详细分析 32位整数乘法, 32位小数乘法以及有符号 /无符号整数除法的程序指令。32位定点数乘法运算示意图32位整数乘法参考程序:; This routine multiplies two 32-bit signed integers resulting; in a 64-bit

2、 product. The operands are fetched from data memory and the result is written back to data memory. Data Storage: X1,X0 32-bit operand Y1,Y0 32-bit operand W3,W2,W1,W0 64-bit product Entry Conditions: SXM = 1 , OVM = 0.mmregsSTACK: .usect “STACK”,100h ;设置堆栈段.bss X0,1.bss X1,1.bss Y0,1.bss Y1,1.bss W0

3、,1.bss W1,1.bss W2,1.bss W3,1.def start.datatable1: .word 1.word 2table2: .word 3.word 4.textstart: STM #X0,AR2 ;将 X0的首地址存入 AR2STM #Y0,AR3 ;将 Y0的首地址存入 AR3RPT #1 ;设置重复执行两次下条指令MVPD table1,*AR2+ ;将 table1开始的两个值传给 X0MVPD table2,*AR3+ ;将 table2开始的两个值传给 Y0STM #X0,AR2 ;LD *AR2,T ; T=X0MPYU *AR3+,A ; A=无符号数

4、 X0无符号数 Y0STL A,W0 ;将 A 送入 W0LD A,-16,A ; A 值左移 16位MACSU *AR2+,*AR3-,A ; A+= Y1无符号数 X0MACSU *AR3+,*AR2,A ; A+= X1无符号数 Y0STL A,W1 ;将 A 送入 W1MAC *AR2,*AR3,A ; A+=11X Y STL A,W2 ; W2=A的低 16位STH A,W3 ; W3=A的高 16位here: B here程序分析:如原理图所示, 32位整数乘法的计算过程是将两个 32位的数 X 和 Y 各自分成 X0、 X1和 Y0、 Y1的 16位数。然后进行 X0Y0, A

5、 值左移 16位, Y1X0, X1Y0, A 值再左移 16位, X1Y1的操作。 需要注意的是在 32位乘法运算中, 实际上包括了三种乘法运算:U U 、 S U 和 S S 。 U 指无符号数, S 指带符号数。在编程时,要用到以下三条乘法指令:MACSU Xmem,Ymem,src ; 无符号数与带符号数相乘并累加 ; MPYU Smem,dst ; 无符号数相乘; MAC Xmem,Ymem,src ;两个带符号数数相乘并累加。32位小数乘法参考程序: ; This routine multiplies two Q31 signed integers resulting in a Q

6、30 product. The operands are fetched from data memory and ; the result is written back to data memory data storege: X1,X0 Q31 operand Y1,Y0 Q31 operand W1,W0 Q30 product SXM = 1 , OVM = 0 ; .mmregs .usect “STACK”,100h将 Y0的首地址存入 AR2将 table1开始的两个值传给 Y0STM #Y1,AR3 ;将 Y1的首地址存入 AR3LD #0,A ;将 A 置 0 A=X0Y1

7、 A+=X1Y0将 A 左移 16位 A+=X1Y1将结果 A 的低 16位送入 W0STH A,W1 ;将结果 A 的高 16位送入 W0小数乘法与整数乘法的程序设计大致类似,不同在于小数乘法少了 X 与 Y 的低位 相乘部分,即 X0与 Y0的相乘部分。这是因为两个整数相乘时,乘积总是“向左增长”。这 意味着多次相乘后, 乘积将会很快超出定点器件的控制范围。 但是,当两个小数相乘时,乘 积总是 “向右增长”。 这就意味着超出定点器件数据范围将是我们不感兴趣的部分, 也就是 指 X0与 Y0相乘得到的结果那部分,因此可不必计算这部分乘积。有符号 /无符号整数除法参考程序 ; Descript

8、ion: 32 bit by 16 bit Unsigned Integer Divide And Modulus 32位除 16位的无符号整数除法.bss d_NumL,1 ;为分子低 16位分配 1个单元.bss d_NumH,1 ;为分子高 16位分配 1个单元.bss d_Den,1 ;为分母分配 1个单元.bss d_QuotL,1 ;为商的低 16位分配 1个单元.bss d_QuotH,1 ;为商的高 16位分配 1个单元.bss d_Rem,1 ;.def DivModUI32DivModUI32: RSBX SXM ; sign extention mode offLD d_

9、NumH,A ;将分子高位移到累加器 ARPT #(16 1 ;重复执行下一条指令 15次SUBC d_Den,A ; A 减去分母的值STL A, d_QuotH ;将 A 的值存到商的高位XOR d_QuotH,A ; 将 A 的低 16位清零OR d_NumL,A ; AL = NumLSTL A, d_QuotL ;将 A 的值存到商的低位STH A,d_Rem ;RET STM d_NumL,AR2 ;将分子低 16位所在单元的地址传给 AR2STM d_Den,AR3 ;将分母所在单元的地址传给 AR2重复执行两次下一条指令将 table1开始的两个值传给 AR2MVPD tabl

10、e2,*AR3 ;将 table2开始的值传给 AR3CALL DivModUI32 ;调用除法子程序 16 bit by 16 bit Unsigned Integer Divide And Modulus 16位除 16位的无符号整数除法.bss d_Num,1 ;为分子分配单元为分母分配单元.bss d_Quot,1 ;为商分配单元.bss d_Rem,1.def DivModUI16 ;定义 16位除法子程序 .word 1000 .word 5DivModUI16:LD d_Num,A ;将分子移到累加器 A重复执行下面指令 16次SUBC d_Den,A ; 16次的减法循环,完成

11、除法STL A,d_Quot ;将 A 的结果保存为商STH A,d_Rem将分子低 16位所在单元的首地址传给 AR2将分子低 16位所在单元的首地址传给 AR3MVPD table1,*AR2 ;将 table1开始的值传给 AR2CALL DivModUI16 ;DSP 做除法运算时,通过减法指令与重复循环指令实现无符号除法运算。需要注 意的是,当被除数的绝对值 除数的绝对 值时,商为整数。 32 bit by 16 bit signed Integer Divide And Modulus 32位除 16位有符号除法为分子低 16位分配单元为分子高 16位分配单元为商低 16位分配单元

12、为商高 16位分配单元.def DivModI32 ;定义 32位除法子程序DivModI32: SSBX SXM ; sign extention mode onLD d_Den,16,A ;将分母移到累加器MPYA d_NumH ; B has sign of quotientABS A ;分母取绝对值STH A ,d_Rem ; d_Rem = abs(Den temporarilyLD d_NumH,16,A ;将分子高 16位移到 AADDS d_NumL,A ; A 加上分子低 16位取 A 绝对值STH A,d_QuotH ; d_QuotH = abs(NumH tempora

13、rilySTL A,d_QuotL ; d_QuotL = abs(NumLtemporarilyLD d_QuotH,A ;将商的高位移到 A重复执行下条指令 16次SUBC d_Rem,A ; 16次减法循环运算,完成除法STL A,d_QuotH ; AH = abs(QuotH ; clear ALOR d_QuotL,A ; AL = abs(NumL AL = abs(QuotL AH = RemBCD DivModI32Skip,BGEQ ; if B neg, then Quot = abs(Quot LD d_QuotH,16,A ;将商的高 16位移到 AADDS d_Qu

14、otL,A ; A 加上商的低 16位NEG A ;如果 B,则 b1b2-b1b1x1+x2=m1e +m2e e (b2-b1b1=m1+m2e e ( 。 浮点数的乘法运算 , 要经过分离指数和尾数,进行算术运算,估计结果的符号位,以及 最后的归一化存储这几个过程。 做乘法运算时要遵循乘法运算的规则把指数相加, 尾数相乘。即:12x1x2=m m e b b +(12。需要注意的是,由于 C54X 的乘法器在一个指令周期内 只能完成 17bit*17bit的二进制补码运算,故相乘运算需要分步实现。浮点数的除法运算 与乘法运算浮点数的乘法运算类似, 同样要经过分离指数和尾数, 估 计结果的

15、符号位, 对指数进行相减运算, 对尾数进行相除运算, 以及最后的归一化存储这几个过程。12x1x2=m m e b b -(12不同的是,在执行除法运算的时候,需要将除 数和被除数都由 24bit 左移成 32bit 的形式,以减少误差。不管是浮点数的加减运算还是乘除运算, 完成对操作数之间的计算后就需要对结果数进 行归一化操作。 所谓归一化操作就是把数据格式转换为第一位为符号位, 紧接着的一位是非 零的数的格式。归一化完后要再把归一化后的定点数转变为浮点数。下面来以浮点数的乘法运算为例具体分析浮点数的运算过程:设是对两个数 x1和 x2进行乘法运算。将被乘数数 x1的尾数分为 Q , R 和 S 三部分, Q 表示尾数的高位的 8bit , R 和 S 表示尾数低位的两字节。同样,乘数 x2也被分为 X , Y 和 Z 三部分, X 表示尾数的高位, Y 和 Z 表示尾数低位的两字节。于是有需要注意的是,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1