本帖最后由 tianli1980 于 2012-4-5 23:04 编辑
首先要明确丙个观念:
第一,汇编语言并不是改善效能的灵丹妙药。根据研究,大部分程序效率不佳的原因首先一类自算法本身,其次是编程习惯,例如用了过多不必要的循环或判断。和CPU特性有关的主要是资料存取的效能问题,假设CPU操作缓存器或外部内存是以32bit为单位,那么在程序中每次操作IB(char)的效能当然比一次读出4B(long)到缓存器中的效能差。通过改善程序的算法和多加注意资料存取的效率才是解决效能问题的主要方法,然后调整编译器最佳化等级,或将该程序模块搬到效能比较好的RAM里执行,用汇编语言改写绝对是最后的办法。以上步骤千万不能本末倒置,当用汇编语言改写后,再要去找出逻辑与算法的问题时就没不像改C程序那么容易了。
第二,非得用到汇编去改写某程序时,通常是对效能要求相当严格的应用的,例如播放压缩过后的声音文件,解压缩的效能不佳会造成播放时断断续续,这样的效能问题不只是单纯的结果比较慢出来而已,而是代表这个应用根本不能使用。这种状况就必须用上任何的最佳化手段,包含用汇编语言改写。在我的经验中,从没有从头到尾写一个汇编程序文件,我都是修改的,有时候要弄清楚CPU的汇编语言函数和C语言函数要怎么沟通就很令人伤脑筋了,就算弄懂了第一个参数是用第几号缓存器存放,超过几个参数就要用stack传递等细节,等换个编译器或CPU又有完全不同的规定,工程师的脑力和时间实在不应浪费在这种事情上。
无论是驱动程序或其他应用程序模块,非得使用汇编语言的状况只有两种:一个是CPU缓存器名称无法用C语言表示的时候,另一个是局部效能调整的状况。而后者我们仅需知道到底我们写C语言程序对应到哪些汇编语言码,即CPU到底执行了哪些指令和,深入地检查这些汇编语言码,也许就可以找出瓶颈所在了。 |