C和ASM不是一个层次的东西(层次不等于贵贱)。在高级语言(高低级之分也没贵贱什么事)范畴中,C是“细节”干预能力最强的语言。再加上C++面向对象描述的拓展,可以说C/C++是目前跨度最大,描述能力最强的语言。但由于C/C++毕竟是一高级语言(通常也有称其为中级语言的),原则上不可能达到指令级描述。虽然可以加入一些特许处理,但这不是C的准,对移植和更新不利。
相反,ASM本身是基于某一特定CPU的指令级(也称低级)语言,其描述和处理能力完全取决于具体CPU之指令系统的描述和处理能力。如同楼主所举的例子,如果存在一次移动八位的指令,则用一条指令就可以完成移位,反之则必须用多条指令来实现同样的移位。
虽然C/C++语言可读性和移植性优于ASM,但实际上,每个具体的C/C++的实现(或称编译)都是建立在某个具体的CPU之上的。换句话说,就是每个具体的C/C++都是存在于某个具体的ASM之上的。不仅是C/C++,可以说所有的高级语言的基础都是ASM——或称指令系统。回到楼主的例子,ss >> 8。虽然在几乎所有的C/C++中,都能用此语句表达右移八位的语义,但具体实现起来还得要看C/C++的基础ASM的处理能力。若上所叙,如果存在一次移动八位的指令,则用一条指令就可以完成移位,反之则必须用多条指令来实现同样的移位。
由于C/C++的编译设计者通常是C/++和相关CPU的指令系统的“双重专家”,所以一般由C/C++编译系统得到的代码就平均意义上讲比直接用ASM编出的代码质量要高,再加上C/C++的可读性和移植性,所以通常人们更愿意使用C或C++。但要注意的是,这里讲的是平均意义,不排除有特殊能人和特殊要求,致使ASM更适合其使用。
总之要认识到,C/C++和ASM不是一个层次的东西,它们没有可比性,所以也没有好坏贵贱之分。这就象分子是由原子组成的一样,化学家不会去鄙视物理学,而物理学家也同样不会去鄙视化学家。一个最为理想的情况就是,把自己培养成为既是物理家同样也是化学家。 |