我不赞成“惟有汇编高”的想法

gigix 2003-04-11 10:14:17
myan:

 

一般来说,学习C/C++的程序员需要对于汇编有一定程度的认识。为什么C的生命力这么强?很大程度上是因为它是一个可移植汇编语言。很多人就是把它当“汇编代码生成器”来用的。所以C和汇编是一家。

所不同的是,C的可移植性是汇编无法相比的,而汇编直接体现CPU的设计,可以写出最优化的程序。从个人能力的培养来说,汇编程序员对某款具体CPU的熟悉程度是C程序员所无法相比的,因为C程序员心中的机器是一个抽象的诺依曼计算机,而汇编程序员面对的就是具体的CPU。好的汇编程序员要针对CPU考虑很多问题,比如字节对齐带来的优化,cache,并行流水等等。说实话,一般的汇编程序员达到这样的程度并不容易,而达不到这样的程度,你的汇编代码在现代compiler编译出来的代码面前只能甘拜下风,我可以说你在编程效率、执行效率和软件可维护性上全面处于劣势。只有达到那样的高度,你的汇编功力才有意义。即使如此,你的主要工作也应当是把你的汇编代码包装起来,供C程序员调用,只有这样,你的价值才能够在整体中得到体现。

所以,我不赞成“惟有汇编高”的想法。这会误导很多人奋不顾身地去钻研汇编语言,成功者必然很少,而其用处又有限。我赞成在C程序员中,在工作有必要的情形下,抽调一部分人精工汇编。要想想,汇编所给你带来的优势能够在产品中得到体现,在商业上是否能够得到回报。

这个争论应该早在十五年前就结束了的。原来Lotus 1-2-3用汇编写,Excel用C写,后者虽然性能略逊,但是随着硬件进步,这种差距完全感觉不到,反而在开发速度、可维护性、体系架构上体现出巨大优势,最终迫使Lotus 1-2-3也改用C/C++,最后仍然不敌,坚持到1998年后寿终正寝。

...全文
83 37 打赏 收藏 举报
写回复
37 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cxjddd 2003-05-17
想起来了。要不就用纳米技术造个火车啊!
  • 打赏
  • 举报
回复
regin 2003-05-17
建筑设计师要比烧砖的强多了吧
  • 打赏
  • 举报
回复
林雨亭 2003-05-17
叹气,谈论汇编的时候,建议从网上当一本《汇编的艺术》(英文,免费),该书首先澄清
1:汇编并不难学,只是学多了vb,vc,一时转不过来弯
2:普通的汇编程序员编写的程序也许可维护性不如编译器,可是速度绝对快。
......
汇编有自己的地盘,用到就学,不用就算了。
  • 打赏
  • 举报
回复
Muf 2003-05-17
对了,剩下两个月需要了解其应用范围、设计目的,优势、劣势及未来发展。真半年就够了。
  • 打赏
  • 举报
回复
Muf 2003-05-17
汇编和C有什么区别?
1. 语法
学一种编程语言的语法能花多少时间?一个月太多。
2. 库
这个东西用的时候再学不迟吧?但事前一定要了解并初步应用。顶多三个月够了吧。
汇编的高级指令(即除加减逻辑运算和程序流程控制指令外),也可以算是库吧。比如取CPU序列号指令等等。

一种语言学到这两样就可以了。剩下的,是所有语言都相同的(如算法,数据结构等等),这些才真正要学(目前大家也都在用了吧)。

那么学会十几种语言并会应用有什么了不起的?很容易的事啊。半年学会一个。
到这时,还会说唯有XX语言高吗?
  • 打赏
  • 举报
回复
chen3feng 2003-05-12
ft,有错了,是to
xuanyuanhaobo(轩辕浩波)
不好意思,EnigmaXJ(Xjie)
  • 打赏
  • 举报
回复
chen3feng 2003-05-12
说错了,应该是设置为8192
  • 打赏
  • 举报
回复
chen3feng 2003-05-12
to EnigmaXJ(Xjie):
我用VC写的内容很少的dll也可以只有通常VC Release的1/10. 那是因为我用的自己的启动代码,设置align为4096而已。空程序的大小说明不了什么问题.分别用C++和汇编写一个同样功能的有实用价值的程序。然后比比代码量,工作量,以及效率才有意义。
然后老板再说,我只按实现的功能给钱,呵呵。
  • 打赏
  • 举报
回复
brucegong 2003-05-06





不同层面上的问题,根本不值得比较啊





  • 打赏
  • 举报
回复
maltose 2003-05-06
语言的争论总是会吸引来大量的目光,
应用决定开发工具:
不能用.net写卫星控制程序,
也不能用汇编写b/s程序。
所以争论没有必要。
(我还是要争论:同意楼主)
  • 打赏
  • 举报
回复
Lsquirrel 2003-05-06
不会汇编,我们能干什么?如果我们只会用所谓的高级语言,优化工具,哦哦哦,我知道Anders编译器写的好,可是具体情况还是自己分析更好
  • 打赏
  • 举报
回复
hanzac 2003-04-26
搞底层不得不用汇编第...
  • 打赏
  • 举报
回复
F310 2003-04-20
Lotus用c写糟蹋c了!
  • 打赏
  • 举报
回复
ncucf 2003-04-20
觉得汇编要实现那么多功能,想起来就头痛,还是用vc算了!
建一个文件都那么烦!
  • 打赏
  • 举报
回复
aloes 2003-04-17
同意楼上,汇编如果如yizhenfeng(一阵风) 所说,就不会存在了。既然存在,就有他的理由。语言是没有必要争论的。
我自己的一个简单的例子:最近公司要做一个加密模块(姑且叫模块吧),为了取得CPU Serial No,用C++内联汇编写了一个静态库,加密模块是用Delphi做的。不是我玩,我也没有本事玩。不用汇编,就不能得到CPU Serial No;不做成库,其他工具开发的软件就不能用;主程序用Delphi,加密模块为什么不用。
  • 打赏
  • 举报
回复
EnigmaXJ 2003-04-15
这样不妥当,汇编也不是那么难学,C++的效率的确比不上它。
有汇编的基础的好处如楼上所说。
不过现在减少体积的优势好象以及功能不大,提高执行速度是最要紧的吧?
在做算法方面,汇编的确能让很多语言惭愧的。
我做H263编码算法就有明显的体会,为了保持其兼容性,应当明确在什么地方用而在什么地方不用。
我觉得,时间充足的话,说句废话,什么都可以用汇编,但是这绝对是废话,没用的,除非是疯子。
高级语言跟汇编的结合才是明智的选择,不要一棒子把什么都打死。
  • 打赏
  • 举报
回复
xuanyuanhaobo 2003-04-14
我完全不同意:
一般的汇编程序员达到这样的程度并不容易,而达不到这样的程度,你的汇编代码在现代compiler编译出来的代码面前只能甘拜下风,我可以说你在编程效率、执行效率和软件可维护性上全面处于劣势。

我不敢称汇编高手,也可能就是 “一般的汇编程序员”
执行效率 不会低~~
你以为现在的 编译器是智能的啊~~~它还是要加上一大堆低效的,甚至无用代码!

比如,我用汇编写的DLL,与用VC写的RELEASE版的DLL相比,体积仅为十分之一
  • 打赏
  • 举报
回复
youngby 2003-04-13
ai
  • 打赏
  • 举报
回复
wgrabob1 2003-04-13
呵呵

看来大家对起码的计算机语言之间的关系都不清楚
  • 打赏
  • 举报
回复
wgrabob1 2003-04-13
我觉得首先大家要有这样的想法:

做一笔生意之前你要考虑,能不能赚钱-->不赚钱你干什么啊你-->这是什么?
其次考虑风险
还要考虑怎么样用最少的时间和投入获得最大的收获
至于中间过程,就相大家对女人的需要-->各不相同
  • 打赏
  • 举报
回复
加载更多回复
发帖
非技术区
加入

1.5w+

社区成员

C/C++ 非技术区
社区管理员
  • 非技术区社区
申请成为版主
帖子事件
创建了帖子
2003-04-11 10:14
社区公告
暂无公告