运用TMS320C54x汇编语言编写定点数运算、浮点数运算程序.docx

运用TMS320C54x汇编语言编写定点数运算、浮点数运算程序.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
运用TMS320C54x汇编语言编写定点数运算、浮点数运算程序

定点数的运算在定点DSP芯片中,采用定点数进行数值运算,其操作数一般采用整数来表示。一个整数的最大表示范围取决于DSP芯片所给定的字长,一般为16位或24位。显然,字长越长,所能表示的数的范围越大,精度也越高。在字长固定的前提下,所需要达到的精度越高,那么所能表示的浮点数的范围就会越小。DSP芯片的数以2的补码形式表示。每个16位数用一个符号位来表示数的正负,0表示数值为正,l则表示数值为负。其余15位表示数值的大小。如:二进制数0010000000000011b=8195二进制数1111111111111100b= -4为了使得无论是无符号数还是符号数,都可以使用同样的加法减法规则,符号数中的负数用正数的补码表示。对DSP芯片而言,参与数值运算的数就是16位的整数。但在许多情况下,数学运算过程中的数不一定都是整数。那么,DSP芯片是如何处理小数的呢?这其中的关键就是数的定标,由程序员来确定一个数的小数点处于16位中的哪一位。通过设定小数点在16位数中的不同位置,就可以表示不同大小和不同精度的小数了。数的定标有Q表示法和S表示法两种。定点数的加减法运算较为简单,只需遵循二进制数加减法运算规则相加减即可。如:两个8位数具有相同的Qn格式,保证隐含的小数点对齐。下图中两个8位数相加,有溢出。溢出是由于字长有限运算结果超出数值的表示范围引起的。定点数的乘法运算DSP处理器都有硬件乘法器和乘法指令,可实现单周期乘法运算,二进制乘法运算包含一系列的移位和加法运算。定点数乘法运算不要求相乘数有相同的Qn格式。两个相乘数分别为Qn和Qm格式,字长为N,结果为Q(n+m)格式,字长为2N。如:以下两个相乘数分别为Q7和Q6格式,8位字长。两个定点小数作乘法运算,结果左移一位,保存高位得到运算结果,结果为Qm(m)格式。小数乘小数,整数乘小数都要求对乘积结果左移一位后,保存高位。整数与整数相乘,须查询标志位确定保存的位数,结果不需要左移一位。DSP处理器带有可选的自动左移一位的功能,消除移位操作的时间开销。定点数的除法运算除法是乘法的逆运算,包括一系列移位和条件减法运算,需要用除法子程序实现。大多数DSP处理器不提供单周期除法指令。如果除法运算中包含负数,应将负数变换为等值的正数,然后作除法运算,最后加上正确的符号。下面详细分析32位整数乘法,32位小数乘法以及有符号/无符号整数除法的程序指令。32位定点数乘法运算示意图32位整数乘法参考程序:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This routine multiplies two 32-bit signed integers resulting; ; in a 64-bit 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,1.bss W1,1.bss W2,1.bss W3,1.def start .data table1: .word 1 .word 2 table2: .word 3 .word 4.textstart: STM #X0,AR2 ;将X0的首地址存入AR2STM #Y0,AR3 ;将Y0的首地址存入AR3RPT #1 ;设置重复执行两次下条指令MVPD table1,*AR2+ ;将table1开始的两个值传给X0RPT #1 ;设置重复执行两次下条指令MVPD table2,*AR3+ ;将table2开始的两个值传给Y0STM #X0,AR2 ;将X0的首地址存入AR2STM #Y0,AR3 ;将Y0的首地址存入AR3LD *AR2,T ;T=X0MPYU *AR3+,A ;A=无符号数X0无符号数Y0STL A,@W0

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档