刚学DSP的菜鸟对NORM指令用法的疑问
累加器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,可这不就变成正数了?而且书上给出的例子又没有先设置符号位扩展。 或者这么说,如果按Q15定义一个负的浮点数,然后左移16位后加载至A累加器。在没有设置符号扩展的情况下,A累加器的保护位应该都为零。那么显然这时候对A里的浮点数进行规格化,就会出错。可我的书里给出的恰恰就是这样的例子。我不知道我到底哪里想错了。 没注意的这么细过,不过帮你顶一下吧!希望有高手可以帮你解答。 一般移位指令都有两种:算术移位和逻辑移位。算术移位就会自动进行符号扩展,绝对不会出现正的变成负的,或者相反。逻辑移位就是你说的那种,总是用0填充空出的比特。aresc 发表于 2015-5-19 19:53
一般移位指令都有两种:算术移位和逻辑移位。算术移位就会自动进行符号扩展,绝对不会出现正的变成负的,或 ...
NORM应该是逻辑移位,因为书上给的程序是先把两个定点数转成浮点数,接着才设置符号位扩展,然后算两个浮点数相乘,再把结果用NORM指令转成定点数。因为两个定点数一个是正数,一个是负数,所以乘积为负数。设置符号位扩展显然是为了乘积结果的正确性。但前面的哪一个负的定点数转浮点数可没设置符号位扩展啊。
句法:NORMsrc[,dst]
表达式:dst=src<<TS,dst=norm(src,TS)
说明:归一化
不知道是不是上面这种句法 zhangmangui 发表于 2015-5-19 22:46
不知道是不是上面这种句法
是这种用法,纯粹的逻辑移位
页:
[1]