免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: guoruimin
打印 上一主题 下一主题

[C] 使用C语言,要不要了解汇编? [复制链接]

论坛徽章:
0
81 [报告]
发表于 2011-05-27 14:40 |只看该作者
除非万不得已,否则当看到了汇编码的时候,我就对项目的质量产生怀疑.
cjaizss 发表于 2011-05-27 13:26

确实如此,现在使用04年写的代码时,为了兼容amd64,一部分汇编代码用C重写了。
没必要时,确实最好不用。

论坛徽章:
0
82 [报告]
发表于 2011-05-27 14:46 |只看该作者
还是要了解的吧……
起码,它能让你知道是怎么死的!
atomthan 发表于 2011-05-05 11:54


论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
83 [报告]
发表于 2011-05-29 21:22 |只看该作者
回复  三月廿七


    哈哈,不一样才是正常的,都一样才不正常呢~~

PS:我还找不到普通的Applica ...
folklore 发表于 2010-07-10 18:18



    性能。
比如大数乘法。32bit × 32bit = 64比特,汇编一条指令够了:
eax × edx = edx(高32bit) ,eax( 低32bit)
imul
C呢?也行,好多指令啊,慢十几倍。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
84 [报告]
发表于 2011-06-15 20:19 |只看该作者
回复 84# yulihua49

  1. long long f(int a, int b) { return a*b; }
复制代码
cl -FA -O2 -c

  1.         mov        eax, DWORD PTR _x$[esp-4]
  2.         imul        eax, DWORD PTR _y$[esp-4]
  3.         cdq
复制代码
gcc -S -O2 -fomit-frame-pointer

  1.         movl        4(%esp), %edx
  2.         movl        8(%esp), %eax
  3.         imull        %edx, %eax
  4.         cltd
  5.         ret
复制代码

  1. long long g(long long a, long long b) { return (int)a*(int)b; }
复制代码
cl -FA -O2 -c

  1.         mov        eax, DWORD PTR _y$[esp-4]
  2.         imul        eax, DWORD PTR _x$[esp-4]
  3.         cdq
复制代码
gcc -S -O2 -fomit-frame-pointer

  1.         movl        12(%esp), %eax
  2.         movl        4(%esp), %ecx
  3.         imull        %ecx, %eax
  4.         cltd
  5.         ret
复制代码
难道不是 imul ?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
85 [报告]
发表于 2011-06-15 20:26 |只看该作者
回复 84# yulihua49

再贴个 clang -S -O2 -fomit-frame-pointer

  1. _f:                                     # @f
  2.         movl        8(%esp), %eax
  3.         imull        4(%esp), %eax
  4.         movl        %eax, %edx
  5.         sarl        $31, %edx
  6.         ret
  7. _g:                                     # @g
  8.         movl        12(%esp), %eax
  9.         imull        4(%esp), %eax
  10.         movl        %eax, %edx
  11.         sarl        $31, %edx
  12.         ret
复制代码
好多指令在哪? 慢十几倍是为什么?

论坛徽章:
0
86 [报告]
发表于 2011-06-15 22:37 |只看该作者
回复  yulihua49

再贴个 clang -S -O2 -fomit-frame-pointer好多指令在哪? 慢十几倍是为什么?
OwnWaterloo 发表于 2011-06-15 13:26


你听他的呢,什么慢十几倍,是他自己不懂 C。99%言必称 C 的,写出来的程序比优秀的 java 程序员差劲,更糟的是 99% 言必称汇编的写出来的汇编烂得一塌糊涂,用 C 的思维写汇编还沾沾自喜的大把人在。

论坛徽章:
0
87 [报告]
发表于 2011-06-16 17:18 |只看该作者
反正 要看内核代码的 话 还是有汇编的部分了

论坛徽章:
0
88 [报告]
发表于 2011-06-17 11:00 |只看该作者
本帖最后由 vupiggy 于 2011-06-17 04:17 编辑
反正 要看内核代码的 话 还是有汇编的部分了
liyangole 发表于 2011-06-16 10:18

又拿内核说事,维护内核那些硬件相关部分代码的人没几个,也没几个部分需要深入理解,更有趣的部分,如 xfs,哪有多少汇编代码,其 C 部分,实现之巧妙远甚于那些汇编例程,用 C 用到那份上足够了,啃汇编有个P用。

加上那个昏昏昭昭的,两大装X贴交相辉映,闹心,赶快埋了吧。

论坛徽章:
0
89 [报告]
发表于 2011-06-21 19:04 |只看该作者
突然想起一个寓言,就是说吃饭的人倒也没必要知道说大米从哪里来,大米怎么来的并不影响你吃不吃饭问题,你可以认为从锅里来的,也可以认为是从超市里来的。。。。只要有人把饭做好。

论坛徽章:
0
90 [报告]
发表于 2011-06-27 12:43 |只看该作者
回复 90# int-main


    精辟呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP