C和ASM不是一个层次的东西(层次不等于贵贱)。

[复制链接]
4181|19
 楼主| jianke123007 发表于 2011-11-30 16:51 | 显示全部楼层 |阅读模式
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不是一个层次的东西,它们没有可比性,所以也没有好坏贵贱之分。这就象分子是由原子组成的一样,化学家不会去鄙视物理学,而物理学家也同样不会去鄙视化学家。一个最为理想的情况就是,把自己培养成为既是物理家同样也是化学家。
hotpower 发表于 2011-11-30 17:09 | 显示全部楼层
高级语言会减缓脑残的发生。
liang7143 发表于 2011-11-30 18:33 | 显示全部楼层
;P高级语言能使你的开发 变得更加高效
PaperKite 发表于 2011-11-30 19:24 | 显示全部楼层
还是建议大多数人至少通一门ASM,最终成为C人
NE5532 发表于 2011-11-30 20:08 | 显示全部楼层
我只鄙视因为怕硬件难研究,通过写应用层跑出来NB的人。
highgear 发表于 2011-11-30 22:02 | 显示全部楼层
C/C++和ASM 确实不是一个层次的东西,不排除有人能用asm做大型的软件。但是随着技术的发展,软件规模越来越大,asm 与 c/c++ 也就有了好坏贵贱之分。
精通 c++ 的程序员可以轻易写出良好的 asm 程序,规模越大,效果越明显;而只精通 asm 程序员很难写出良好的c/c++程序,规模越大,效果越明显。
chunyang 发表于 2011-11-30 22:07 | 显示全部楼层
又开始长篇大论这个经年的老话题了……
sysdriver 发表于 2011-11-30 22:51 | 显示全部楼层
C写1年,汇编写1年,现在是,2个同时写,支持C就写C,不支持就写汇编,有中断就用,没中断就看门狗定时器,有加法就用,没有就INC,有些东西不是你像怎样就怎样的。混合多了,渐渐发现,不管是C还是ASM,编程思路总是不变的。
原野之狼 发表于 2011-11-30 23:42 | 显示全部楼层
统统拿下最好 呵呵~
highgear 发表于 2011-11-30 23:57 | 显示全部楼层
呵呵,我写过超过30万行的一个汇编程序,所以我无比痛恨汇编。
rclong 发表于 2011-12-1 00:18 | 显示全部楼层
楼上你有没有用其他语言把程序重构过?
highgear 发表于 2011-12-1 00:31 | 显示全部楼层
之所以用汇编是因为小马要拉大车,现在用了高速 cpu (400M Blackfin), 当然要用c++ 做了,连 c 都跳过。如果我没有c++的经验,估计那个汇编程序会是一团乱麻。
Cortex-M0 发表于 2011-12-1 05:36 | 显示全部楼层
又开始长篇大论这个经年的老话题了……
chunyang 发表于 2011-11-30 22:07


没办法,二姨家现在缺乏灵感~~~
hotpower 发表于 2011-12-1 07:52 | 显示全部楼层
C++可以带来灵感和创造力。
alnjby 发表于 2011-12-1 08:41 | 显示全部楼层
高级语言能使你的开发 变得更加高效








南京耳鼻喉医院
耳鼻喉医院
and 发表于 2011-12-1 09:49 | 显示全部楼层
硬件也在向C靠拢,Cortex-Mx就是例证。
fail 发表于 2011-12-1 13:30 | 显示全部楼层
"这就象分子是由原子组成的一样,化学家不会去鄙视物理学,而物理学家也同样不会去鄙视化学家。一个最为理想的情况就是,把自己培养成为既是物理家同样也是化学家。"
这比喻真有趣,C是分子,ASM是原子
论坛游客 发表于 2011-12-1 16:45 | 显示全部楼层
嗯  接下来
还有裸奔与os
模拟与数字
NE5532 发表于 2011-12-1 17:01 | 显示全部楼层
嗯  接下来
还有裸奔与os
模拟与数字
论坛游客 发表于 2011-12-1 16:45


恩,因为这些人根本就没搞懂什么是技术,技术是拿来干神马的。
gxs64 发表于 2011-12-1 17:02 | 显示全部楼层
尺有所短,寸有所长。只不过随着技术的发展,减小了汇编的应用范围。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:想办法解决问题,而不是为问题烦恼!!!

0

主题

19

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部