打印
[应用相关]

走出汇编误区

[复制链接]
1070|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-9-7 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
       首先,汇编语言不是改善效能的万灵丹,根据研究,大部分程序效率不佳的原因首先来自算法本身,其次是编程习惯,例如用了过多不必要的循环或判断。和CPU特性有关的主要是资料存取的效能问题,我们前面有提到过,假设CPU操作缓存器或外部内存是以31 bit 为单位,那么在程序中每次操作1B(char)的效能当然比一次读出4B(long)到缓存器中的效能差。通过发送智育的算法和多加注意资料存取的效率才是解决效能问题的主要方法,然后调整编译器最佳化等级,或将该程序模块搬移到效能比较好的改C语言程序RAM里执行,用汇编语言改写绝对是最后的办法。以上步骤千万不能本末倒置,当用汇编语言改写后,再要去找出逻辑与算法的问题时就没不象改C 语言程序那么容易了。

   第二,非得汇编语言去改写某程序模块时,通常是对交通要求相当严格的应用,例如播放压缩过后的声音文件,解压缩的效能不佳会造成播放时断断续续,这样的效能问题不只是单纯的结果比较慢出来而已,而是代表这个应用根本不能使用。这种状况就必须用上任何的最佳化手段,用汇编语言改写。在我的经验中,我真的不曾从头到尾写一个汇编程序文件,我都要是修改了的;有时候要弄清楚某CPU的汇编语言函数和C语言函数要怎么沟通就很令人伤脑筋了,主就算弄懂了第一个参数是用第几号缓存器存放,超过几个参数就有、要用stack传递等细节,等换个编译器或CPU又有完全不同的规定,工程师的脑力和时间实在不应该浪费在这种事情上。
    无论是驱动程序或其他应用程序模块,非得使用汇编语言的状况只有两种,一个是CPU缓存器名称无法用C语言表示的时候,另一个是局部效能调整的状况。而后者我们仅需要知道到底我们写的C语言程序对应到哪些汇编语言码,即CPU到底执行了哪些指令,深入地检查这些汇编语言码,也许就可以找出瓶颈所在了。
沙发
huangfeng33| | 2013-9-7 22:20 | 只看该作者
C和C++才是真正的编译语言,个人认为汇编只要求会看即可。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
crazy2012 + 1 神马都是浮云
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝