疑问再提:C与汇编的问题(提高C编译器效率,扬长避短)

[复制链接]
9588|43
常来21IC 发表于 2009-12-28 21:34 | 显示全部楼层
我是乞丐,进来讨分的..
NE5532 发表于 2009-12-28 22:20 | 显示全部楼层
楼主,我一句话给你解答:越通用的东西越复杂,越专用的东西越简单。
这就是汇编和C的关系,C的效率高不高,是取决于编译器和硬件的配合,只会其中一样,你就只能当打字员,两个都精通,你就可以笑傲江湖。
暮然 发表于 2009-12-28 23:32 | 显示全部楼层
我们是去食堂打饭吃,不是去当掌勺的。
可能10块钱买到的,成本只要5块,硬要节省的话,自己花两小时准备材料,慢慢做。用的电脑也是几k米买的,如果硬要自己做,也可以,成本相对客观。
c和汇编,不过是一种工具,就像打渔,你可以钓鱼,也可以撒网,当然也可以一个炸*过去~~~~~~~。
何必过多争执?有了思想,一样用,求同存异,各有妙招。
yixuanyuxiao 发表于 2009-12-28 23:39 | 显示全部楼层
15# 谈的元
回15楼:
c作为普通话,在各个地方都能听得懂,而对于汇编(方言)来说就不是所有的人都能听懂了,所以c编译器为了将C语言普及,就把左移8位按8个左移一位来操作。就好像说话都用嘴,但是说出来的方言不一样,那么一位一位的移就是用嘴说话,大家都用嘴说话啊,所以说C语言这样编译的话就提高了兼容性。
不知道你能不能明白我说的,只是个人感觉而已。
laslison 发表于 2009-12-28 23:47 | 显示全部楼层
貌似老问题
 楼主| 谈的元 发表于 2009-12-29 08:41 | 显示全部楼层
本帖最后由 谈的元 于 2009-12-29 08:43 编辑
15# 谈的元  
回15楼:
c作为普通话,在各个地方都能听得懂,而对于汇编(方言)来说就不是所有的人都能听懂了,所以c编译器为了将C语言普及,就把左移8位按8个左移一位来操作。就好像说话都用嘴,但是说出来的方言 ...
yixuanyuxiao 发表于 2009-12-28 23:39




你说的方言就是我们要的结果啊。我们不需要别人听懂方言啊。


c语言具有兼容性,得到每个人的认可。

我质疑的是为何C编译器(就就是翻译)何谓对这个我说的例子的编译结果这么差?



是C编译器做不到吗?还是怎么的?
程序匠人 发表于 2009-12-29 09:11 | 显示全部楼层
10年前开始争论,10后还在争论。
HWM 发表于 2009-12-29 09:17 | 显示全部楼层
争论通常是没有合理的定位。如果能合理定位了,争论就不复存在。问题是“定位”本来就是个难题,就象“单片机”和“嵌入式”等的定位。
夏风 发表于 2009-12-29 09:20 | 显示全部楼层
隔阵就重翻一次...
5880527 发表于 2009-12-29 12:21 | 显示全部楼层
好的西服据说都是手工缝制,缝纫机速度快,但还是有很多细活不如缝衣针的,当然这需要使用缝衣针的裁缝技术足够好
lileibmw 发表于 2009-12-29 13:33 | 显示全部楼层
两种结合用各抒所长,非用汇编写算法,非用C玩精确时序,不觉得累的话就随便了。都是工具吗,记得有个比较有修为的说过 C就是汇编,写出C来,汇编就出现在眼前。
 楼主| 谈的元 发表于 2009-12-29 19:10 | 显示全部楼层
本帖最后由 谈的元 于 2009-12-29 19:17 编辑

本人初用C编译器。

发现有这么个问题,因此提出来,而本人认为这是C编译器自身的问题。

因此希望  通过讨论来达到 修改C编译器的目的。


重点不在  讨论  C编译器与汇编谁高啊,


因此

   请大家讨论C编译器是否能做到  对这类特殊问题 进行   特殊编译。

   第一个问题是移位。

   第二个问题是除法。

谢谢!
 楼主| 谈的元 发表于 2009-12-29 19:35 | 显示全部楼层
以前,都是想到怎么用编译器工具,从未想到对工具提出置疑,也就 别提  希望别人提高 C编译器的质量

了。

但愿这是一个开始。让人 知道  路未到尽头  而进取。
古道热肠 发表于 2009-12-29 22:16 | 显示全部楼层
C语言能调用汇编来实现特定功能的,楼主您费点心思学这个技术吧。遇到一个具备n个字符的长数组,要拼装成队列左移,C语言效率很差,怎么办,写个汇编函数来实现呗!亲身体验过一会。
arm86 发表于 2009-12-29 22:20 | 显示全部楼层
输入的不是汇编,是寂寞。
murphy_zhu 发表于 2009-12-29 22:54 | 显示全部楼层
感觉C语言兼容性要好一些,其次单片机的C语言可以编写合作式调度器作用于单片机系统上。汇编语言编写的合作式调度器还没见过!仅个人愚见!
 楼主| 谈的元 发表于 2009-12-30 00:20 | 显示全部楼层
C语言能调用汇编来实现特定功能的,楼主您费点心思学这个技术吧。遇到一个具备n个字符的长数组,要拼装成队列左移,C语言效率很差,怎么办,写个汇编函数来实现呗!亲身体验过一会。 ...
古道热肠 发表于 2009-12-29 22:16

说的很好。


但这方面例子见的少啊。

再说本人就是初用C,怕写的汇编与C不好相处啊。


再说可读性也不好啊,也不简洁啊。
ejack 发表于 2009-12-30 07:39 | 显示全部楼层
说的很好。


但这方面例子见的少啊。

再说本人就是初用C,怕写的汇编与C不好相处啊。


再说可读性也不好啊,也不简洁啊。
谈的元 发表于 2009-12-30 00:20


第一次总会有些生涩的……不要紧,慢慢来……
连很多大型商用计算机软件都会在效率关键的地方嵌汇编,LZ根本不必有这么多思想顾虑。程序终归是要为我们的应用服务的,西装革履毕竟没有便装跑鞋轻快。
怕可读性不好?穿条裤子(库)就光鲜亮丽了……:)
LMCHEN 发表于 2010-1-3 13:07 | 显示全部楼层
我想最好两者都学得牛叉叉,看项目具体情况,来决定用C还是ASM,大不了再来个C嵌ASM或ASM嵌C什么的!碰到问题我一般喜欢在自身上找原因,不去责怪或讨论外因,我想世界万物各有优缺点,关键是我们有没能力很的驾驭它!
 楼主| 谈的元 发表于 2010-1-8 00:57 | 显示全部楼层
结论,PIC的C编译器做到了我说的移动8次进行特殊处理,不是做不到,是其他C编译器没有做到。终于解惑了
22:                  x1=y1>>8;
   186     21A     MOVF 0x1a, W :交换,并没有移动8次
   187     029     MOVWF 0x9
23:                  x1=y1>>7;   移动7次
   188     21A     MOVF 0x1a, W
   189     02D     MOVWF 0xd
   18A     219     MOVF 0x19, W
   18B     02C     MOVWF 0xc
   18C     C07     MOVLW 0x7
   18D     037     MOVWF 0x17
   18E     297     INCF 0x17, W
   18F     B93     GOTO 0x193
   190     403     BCF 0x3, 0
   191     32D     RRF 0xd, F
   192     32C     RRF 0xc, F
   193     038     MOVWF 0x18
   194     2D8     DECFSZ 0x18, W
   195     B90     GOTO 0x190
   196     20C     MOVF 0xc, W
   197     029     MOVWF 0x9
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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