- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C5400的浮点数的算术运算 4.6.4小节以及5.1.5小节 浮点数的表示方法 在定点运算中,小数点是在一个特定的固定位置。在定点运算系统中,虽然在硬件上实现简单,但是表示的操作数的动态范围要受到限制。使用浮点数,可以避免这个困难。 一个浮点数由尾数m、基数b和指数e三部分组成。即: IEEE标准里的浮点数表示方法 这个格式用带符号的表示方法来表示尾数,指数含有127的偏移。在一个32-bit表示的浮点数中,第一位是符号位,记为S。接下来的8-bit表示指数,采用127的偏移格式(实际是e-127)。然后的23-bit表示尾数的绝对值,考虑到最高一位是符号位,它也应归于尾数的范围,所以尾数一共有24-bit。 IEEE标准里的浮点数表示方法 比如说:十进制数-29.625可以用二进制表示为-11101.101B,用科学计数法表示为 -1.1101101*24,其指数为127+4=131,化为二进制表示,故此数的浮点格式表示为11000001111011010000000000000000,转换成16进制表示为0xC1ED0000。 浮点数运算的基本步骤 分离符号、指数、尾数。 根据需要对齐指数,按运算法则进行定点数运算。 归一化指数 按浮点数格式重新组合。 下面以浮点数加为例,详细介绍 一. 浮点数加法运算的步骤 要在C54X上实现浮点运算,操作数必须变换成定点数,实际上就是一个数据格式的转换问题。 执行完下面代码后,操作数1就从原来在op1_hsw和op1_lsw(共32bit)中的浮点数格式转换为三部分:指数和符号位(存储于op1se中)、尾数低位(存储于op1lm中)以及尾数高位(存储于op1hm中),这时所有的数值就都转换为定点数的格式了。 dld op1_hsw,a ;将OP1装入累加器A中。 sfta a,8 sfta a,-8 ;通过先左移后右移使 AG = 0。 bc op1_zero,AEQ ;如果OP1是零,转入特殊处理。 sth a,-7,op1se ;将符号和指数存储到OP1SE中。 stl a,op1lm ;存储尾数的低位。 and #07Fh,16,a ;将浮点数格式中的符号和指数去掉 ;得到尾数的高位。 add #080h,16,a ;给尾数加上小数点前的“1”。 sth a,op1hm ;存储尾数的高位。 浮点数加法运算 由于实行的是带符号位的运算,所以要把尾数变成带符号的形式,即如果是正数就不改变其存储格式,而如果是负数,就要用补码来表示尾数,这部分的代码如下: bitf op1se,#100h ;取出op1符号位的值于TC位中 bc testop2,NTC ;如果TC = 0则跳转到testop2处 ld #0,a ; dsub op1hm,a ;0 – op1的尾数,得到尾数的补码表示 dst a,op1hm ;将尾数存入op1hm和op1lm中 testop2: bitf op2se,#100h ;取出op1符号位的值于TC位中 bc compexp,NTC ;如果TC = 0则跳转到compexp处 ld #0,a ; dsub op2hm,a ;0 – op1的尾数,得到尾数的补码表示 dst a,op2hm ;将尾数存入op1hm和op1lm中 浮点数加法运算 通过上述过程,把浮点数分解为尾数和指数两个部分,对于浮点数的加法而言,计算过程是左移指数较小的操作数的尾数,使得两个操作数的指数一致,相差几位移几位,再把尾数相加,归一化后输出。 先比较两个操作数指数的大小,以决定到底是尾数直接相加还是移位以后再相加,该段过程可以用以下的代码来实现: compexp: ld op1se,a ;将操作数1的符号和指数位装入acc A中 and #00ffh,a ;去掉符号位的影响 ld op2se,b ;将操作数2的符号和指数位装入acc B中 and #00ffh,a ;去掉符号位的影响 sub a,b ;op2的指数 - op1的指数结果赋给acc B bc op1_gt_op2,BLT ;跳到进行 op1 op2的操作处 bc op2_gt_op1,BGT ;跳到进行 op2 op1的操作处 a_eq_b: ;执行A = B的操作 dld op1hm,a ;将操作数1的尾数(32bit)放到acc A中 dadd op2hm,a
文档评论(0)