毕业后玩的DSP都是汇编,自从VC33后就很少亲自编程了。最近因为工作原因不得不接触CCS5.2,看了一些案例程序,突然意识到一个问题,就是在CCS中用difine定义的数,在程序中使用时会保留多少精度呢?学过单片机的人都知道,立即数寻址方式下的立即数是精度有限的,如果F28335的指令码是32位,那么立即数寻址的精度必然低于32位。那么具体是多少呢?比如: #define sanfenzhiyi 0.3333333333333333333333333333333333 在程序中有: a=1; b=a*sanfenzhiyi; 那么此条语句从汇编的角度来讲应该算立即数寻址,后面的3能保留多少位呢,谢谢。 |
Tony Tang:
define是宏,编译时是要直接替换到调用的地方,所以取决于上b的类型。
SUN wang:
回复 Tony Tang:
您好,多谢答复。
宏定义和直接替换,我是知道的。大概是我搞汇编太久了,所以我思路还是凝聚在汇编的阶段。C语言在CCS里应该是先转换成汇编语言,才最终成为机器码。那么在汇编系统里,对于语句中的立即数(这个立即数无论怎么来的,直接写的还是宏定义的),都应该属于该机器码中的一部分。如在VC33的汇编系统中,其立即数寻址时,BIT0~BIT15是给指令中的立即数的,也就是说,VC33的系统中的立即数只有16位的有效精度,无论是整型还是小数。
不知道我上面的认识是否有错?
谢谢指导。