请教高手:关于NORM指令的问题,谢谢各位一定要帮帮我!!

zouxianzhao   2007-8-3 07:28 楼主
我想请教你们一下NORM指令的问题,我在TI文献上看过这个指令了,但还是不明白,我想问的是,用NORM指令规格化以后的结果是全都一个格式么?NORM指令不是要将尾数&指数进行分离么?规格化是将尾数全都规和为一样的?还是……
不好意思我问的问题有些语无伦次,因为我真的是非常糊涂了,我已经看了一天了,也没明白,麻烦各位懂的高手一定要交交我,谢谢啦~!!!!

回复评论 (13)

NORM指令执行后的数据具体是什么格式呢?如像12E6或0.12E3,等我想总应该有个形式的,不知道我得理解对不对,
然后是,我编了一个小除法程序用一个乘积变量转载被除数和除数的乘积,从而判断商的正负,但是这种方法不好,还有没有其他的方法判断呢?
第三,如果被除数,除数都为正则余数为正
      如果被除数和除数任意一个为负,另一个为正,则余数的符号于被除数的符号相同
      如果被除数和除数皆为负,余数为正
我说的这个规律是正确的么?我在编除法程序的时候用需要用到
谢谢你了!!!!
点赞  2007-8-4 03:58
1.  NORM 指令,只是把存放在ACC中的二进制码按规则转换。至于这个码表示什么数,那是另外一个问题了。实际上也有不同的表示法,如Q0,Q1,...,Q15 之类。这些都是所谓定点数。把这类定点数化为浮点,一种算法是经过NORM一道步骤。如果已经是浮点格式的数,通常就不需要再NORM了。
    以15 位规格化为例,待转换的码存放ACCH,程序是书上的例3,则:
   ACCH原值   ACCH中转换结果     AR1中计数值
       0001               4000                    14
       0002               4000                    13
       0003               6000                    13
       000F                7100                    10
       FFFF                8000                    15
       FFFE                8000                    14
2。你是用汇编语言编程吧,那判断两个数是否同号,似乎应该先把两个数 XOR,再判结果的符号位(BIT 指令),这样比做乘法快一些。
3。看上去是对的,但我也没有证明出来。
点赞  2007-8-4 07:42
     虽然我不清楚你的需求,不过我觉得做除法之类的程序,完全没有必要自己编呀。即使是汇编语言编程,IFFF-754 格式浮点数除法,调用 C 库里的 F$$DIV 函数不就结了?自己编不知要费多大的劲,肯定还没有人家考虑的周到。
点赞  2007-8-4 08:35
  我把 C 库里 F$$DIV 的源代码调出来瞄了一眼,虽然注释很详细了,还是令人望而生畏,要完全看懂也得费不少劲。
点赞  2007-8-4 08:45
我现在主要是想学习DSP编程的思想,并不是想真的用除法程序,我现在刚开始接触编程序,什么都不清楚,尤其在算法上面,一个简单的程序我都不会实现,所以……

点赞  2007-8-4 09:38
      如果没有明确的要求,我想学习 DSP 编程还是从 C 语言入手比较实际。CCS 的一般操作,用 C 语言编程,从编辑,编译,连接,到 DEBUG 的全过程,以及片内外设的功能和用法等等都基本掌握后,再适当了解一点汇编语言就可以了。
    我觉得真要开发点什么东西,还是以C语言为主,实在不得而已,才少量用一点汇编语言。
点赞  2007-8-7 01:07
谢谢你,但是我现在公司要求我先看汇编,可能是想让我更清楚的了解一下DSP,而且曾看过一次C语言的DSP,简直就是看天书,上面写的完全不明白,我觉的C实在太难了,呵呵
这次我还要请教你一下,别嫌我烦人啊~~~
我编了一个小的除法程序,被除数是64h(100),除数为14h(20),被除数和除数和商的变量定义在B2中,地址分别为60H,61H,62H,我在load program以后查看了Memory,可是60H,61H,62H的结果显示为
0x0060:   .bss
0x0060:   0x787C  0xA903
0x0062:   0x8AC6  0x1696
0x0064:…………………………
……………………………………
……………………………………
这个结果的显示,不是我要得到的商啊,我不太明白,应该怎么看结果,请教你一下,谢谢
点赞  2007-8-7 06:13
        得要一步一步地看,调用子程序之前存储的初值是什么,除法过程中流程对不对,每走一步中间结果对不对,总之,免不了要单步执行走上一遍,尤其是第一次编程的时候。以我的经验来说,一次成功的程序几乎没有。单看结果肯定是不行的。虽然一开始结果稀奇古怪,但最后检查下来,一般也只修改了少许疏漏,甚至是笔误就 OK 了。
   程序中总免不了有疏漏或笔误,这也许是我的毛病,高手恐怕不是这样,惭愧!
点赞  2007-8-7 06:50
   你说是“ Load  Program 以后来看”,如果真刚刚 Load Program 后,  bss  段中的值是没意义的。汇编语言程序,要在运行以后,先在指定地址赋初值,然后再调用你的子程序,退出子程序,返回调用者后,再看子程序执行结果。
点赞  2007-8-7 06:57
谢谢了,确实是啊,不运行怎么会有数据显示,呵呵,我太傻了,
我不清楚为什么我在编译或build的时候总是出现错误
“Error writing to file:
d:\\ti\\cc\\bin\\\\va\\vadb\\cache/d4013375602.dl
No such file or directory\"

这是怎么回事那?而且虽然出现了错误,但还是可以编译和build
我不太清楚为什么我得程序总是在运行到一个地方的时候就跳转到一个地方,有的时候复位都不起作用,只能重新load,而且程序真是奇妙啊,我明明是写着lacl的指令,可是运行的时候就是没有往ACC里写数值~~~我看程序的问题很大,很多啊

点赞  2007-8-7 07:31
     所以要单步执行,就是要看看到底哪条指令执行结果,超出了自己原先的想象。
点赞  2007-8-7 07:40
我不清楚为什么我在编译或build的时候总是出现错误
“Error writing to file:
d:\\ti\\cc\\bin\\\\va\\vadb\\cache/d4013375602.dl
No such file or directory\"

这是怎么回事那?而且虽然出现了错误,但还是可以编译和build

是啊,我刚才写错了,现在好了,就是上面的问题没有解决,不知道处在哪了?
点赞  2007-8-7 07:51
     这我可没有见过。我这里只要有错,马上就不能生成  OUT  文件。
   错误还是在
Error writing to file
     时候发生的,需要写的文件,就不是obj 文件, list 文件, map 文件, out  文件?还有什么别的文件?不知道。
点赞  2007-8-7 08:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复