打印

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

[复制链接]
楼主: 谈的元
手机看帖
扫描二维码
随时随地手机跟帖
21
常来21IC| | 2009-12-28 21:34 | 只看该作者 回帖奖励 |倒序浏览
我是乞丐,进来讨分的..

使用特权

评论回复
22
NE5532| | 2009-12-28 22:20 | 只看该作者
楼主,我一句话给你解答:越通用的东西越复杂,越专用的东西越简单。
这就是汇编和C的关系,C的效率高不高,是取决于编译器和硬件的配合,只会其中一样,你就只能当打字员,两个都精通,你就可以笑傲江湖。

使用特权

评论回复
23
暮然| | 2009-12-28 23:32 | 只看该作者
我们是去食堂打饭吃,不是去当掌勺的。
可能10块钱买到的,成本只要5块,硬要节省的话,自己花两小时准备材料,慢慢做。用的电脑也是几k米买的,如果硬要自己做,也可以,成本相对客观。
c和汇编,不过是一种工具,就像打渔,你可以钓鱼,也可以撒网,当然也可以一个炸*过去~~~~~~~。
何必过多争执?有了思想,一样用,求同存异,各有妙招。

使用特权

评论回复
24
yixuanyuxiao| | 2009-12-28 23:39 | 只看该作者
15# 谈的元
回15楼:
c作为普通话,在各个地方都能听得懂,而对于汇编(方言)来说就不是所有的人都能听懂了,所以c编译器为了将C语言普及,就把左移8位按8个左移一位来操作。就好像说话都用嘴,但是说出来的方言不一样,那么一位一位的移就是用嘴说话,大家都用嘴说话啊,所以说C语言这样编译的话就提高了兼容性。
不知道你能不能明白我说的,只是个人感觉而已。

使用特权

评论回复
25
laslison| | 2009-12-28 23:47 | 只看该作者
貌似老问题

使用特权

评论回复
26
谈的元|  楼主 | 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编译器做不到吗?还是怎么的?

使用特权

评论回复
27
程序匠人| | 2009-12-29 09:11 | 只看该作者
10年前开始争论,10后还在争论。

使用特权

评论回复
28
HWM| | 2009-12-29 09:17 | 只看该作者
争论通常是没有合理的定位。如果能合理定位了,争论就不复存在。问题是“定位”本来就是个难题,就象“单片机”和“嵌入式”等的定位。

使用特权

评论回复
29
夏风| | 2009-12-29 09:20 | 只看该作者
隔阵就重翻一次...

使用特权

评论回复
30
5880527| | 2009-12-29 12:21 | 只看该作者
好的西服据说都是手工缝制,缝纫机速度快,但还是有很多细活不如缝衣针的,当然这需要使用缝衣针的裁缝技术足够好

使用特权

评论回复
31
lileibmw| | 2009-12-29 13:33 | 只看该作者
两种结合用各抒所长,非用汇编写算法,非用C玩精确时序,不觉得累的话就随便了。都是工具吗,记得有个比较有修为的说过 C就是汇编,写出C来,汇编就出现在眼前。

使用特权

评论回复
32
谈的元|  楼主 | 2009-12-29 19:10 | 只看该作者
本帖最后由 谈的元 于 2009-12-29 19:17 编辑

本人初用C编译器。

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

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


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


因此

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

   第一个问题是移位。

   第二个问题是除法。

谢谢!

使用特权

评论回复
33
谈的元|  楼主 | 2009-12-29 19:35 | 只看该作者
以前,都是想到怎么用编译器工具,从未想到对工具提出置疑,也就 别提  希望别人提高 C编译器的质量

了。

但愿这是一个开始。让人 知道  路未到尽头  而进取。

使用特权

评论回复
34
古道热肠| | 2009-12-29 22:16 | 只看该作者
C语言能调用汇编来实现特定功能的,楼主您费点心思学这个技术吧。遇到一个具备n个字符的长数组,要拼装成队列左移,C语言效率很差,怎么办,写个汇编函数来实现呗!亲身体验过一会。

使用特权

评论回复
35
arm86| | 2009-12-29 22:20 | 只看该作者
输入的不是汇编,是寂寞。

使用特权

评论回复
36
murphy_zhu| | 2009-12-29 22:54 | 只看该作者
感觉C语言兼容性要好一些,其次单片机的C语言可以编写合作式调度器作用于单片机系统上。汇编语言编写的合作式调度器还没见过!仅个人愚见!

使用特权

评论回复
37
谈的元|  楼主 | 2009-12-30 00:20 | 只看该作者
C语言能调用汇编来实现特定功能的,楼主您费点心思学这个技术吧。遇到一个具备n个字符的长数组,要拼装成队列左移,C语言效率很差,怎么办,写个汇编函数来实现呗!亲身体验过一会。 ...
古道热肠 发表于 2009-12-29 22:16

说的很好。


但这方面例子见的少啊。

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


再说可读性也不好啊,也不简洁啊。

使用特权

评论回复
38
ejack| | 2009-12-30 07:39 | 只看该作者
说的很好。


但这方面例子见的少啊。

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


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


第一次总会有些生涩的……不要紧,慢慢来……
连很多大型商用计算机软件都会在效率关键的地方嵌汇编,LZ根本不必有这么多思想顾虑。程序终归是要为我们的应用服务的,西装革履毕竟没有便装跑鞋轻快。
怕可读性不好?穿条裤子(库)就光鲜亮丽了……:)

使用特权

评论回复
39
LMCHEN| | 2010-1-3 13:07 | 只看该作者
我想最好两者都学得牛叉叉,看项目具体情况,来决定用C还是ASM,大不了再来个C嵌ASM或ASM嵌C什么的!碰到问题我一般喜欢在自身上找原因,不去责怪或讨论外因,我想世界万物各有优缺点,关键是我们有没能力很的驾驭它!

使用特权

评论回复
40
谈的元|  楼主 | 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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则