[DSP编程] 刚学DSP的菜鸟对NORM指令用法的疑问

[复制链接]
4666|7
 楼主| #crazy# 发表于 2015-5-19 15:53 | 显示全部楼层 |阅读模式
累加器A里的值为1110 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx,可知冗余的符号位数为2,那么用NORM指令后,A里的值左移-6位,变成了0000 0011 10xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx,可这不就变成正数了?而且书上给出的例子又没有先设置符号位扩展。
 楼主| #crazy# 发表于 2015-5-19 19:18 | 显示全部楼层
或者这么说,如果按Q15定义一个负的浮点数,然后左移16位后加载至A累加器。在没有设置符号扩展的情况下,A累加器的保护位应该都为零。那么显然这时候对A里的浮点数进行规格化,就会出错。可我的书里给出的恰恰就是这样的例子。我不知道我到底哪里想错了。
海中水 发表于 2015-5-19 19:40 | 显示全部楼层
没注意的这么细过,不过帮你顶一下吧!希望有高手可以帮你解答。
aresc 发表于 2015-5-19 19:53 | 显示全部楼层
一般移位指令都有两种:算术移位和逻辑移位。算术移位就会自动进行符号扩展,绝对不会出现正的变成负的,或者相反。逻辑移位就是你说的那种,总是用0填充空出的比特。

 楼主| #crazy# 发表于 2015-5-19 21:31 | 显示全部楼层
aresc 发表于 2015-5-19 19:53
一般移位指令都有两种:算术移位和逻辑移位。算术移位就会自动进行符号扩展,绝对不会出现正的变成负的,或 ...

NORM应该是逻辑移位,因为书上给的程序是先把两个定点数转成浮点数,接着才设置符号位扩展,然后算两个浮点数相乘,再把结果用NORM指令转成定点数。因为两个定点数一个是正数,一个是负数,所以乘积为负数。设置符号位扩展显然是为了乘积结果的正确性。但前面的哪一个负的定点数转浮点数可没设置符号位扩展啊。
zhangmangui 发表于 2015-5-19 22:45 | 显示全部楼层

句法:NORM  src[,dst]

表达式:dst=src<<TS,dst=norm(src,TS)

说明:归一化
zhangmangui 发表于 2015-5-19 22:46 | 显示全部楼层
不知道是不是上面这种句法
 楼主| #crazy# 发表于 2015-5-20 18:17 | 显示全部楼层
zhangmangui 发表于 2015-5-19 22:46
不知道是不是上面这种句法

是这种用法,纯粹的逻辑移位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部