打印

请教每条c语句等于多少机器周期?

[复制链接]
5117|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjf0304|  楼主 | 2010-1-22 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
cjf0304|  楼主 | 2010-1-22 09:39 | 只看该作者
我找了个办法如下:
我用的是keil u3,debug调试,然后查看汇编窗口,里面就是对应c程序的汇编代码.每条语句对应的机器周期是不一样的,有兴趣的可以看看.

使用特权

评论回复
板凳
冷漠| | 2010-1-22 09:56 | 只看该作者
哈哈,Keil不会让你这么低效:它自己有运行时间记录功能。LZ 仔细找找。

如果你做ICE,你会不会不做/没有这项功能?所以,keil肯定有。

要想得到自己C程序的汇编码,也不用到调试窗口:只要在你的C程序第一条输入
#pragma  src(your_name.a51)

然后把your_name.a51文件加到项目窗口就可以看到汇编码了。

使用特权

评论回复
地板
cjf0304|  楼主 | 2010-1-22 10:08 | 只看该作者
还有这功能啊 我得试试  谢谢楼上的大哥!1!!!

使用特权

评论回复
5
xlsbz| | 2010-1-22 10:27 | 只看该作者
看看反汇编 然后找本汇编的书,自己算算

使用特权

评论回复
6
冷漠| | 2010-1-22 10:40 | 只看该作者
如若遇到for,if 这类语句,怎么计算?如若程序有2,000条,20,000汇编语句,怎么自己算?

使用特权

评论回复
7
xlsbz| | 2010-1-22 11:00 | 只看该作者
难道your_name.a51的内容  与  通过调试窗口看到的反汇编内容不一样么?

我比较了一下

差不多的啊

使用特权

评论回复
8
IC_99| | 2010-1-22 12:30 | 只看该作者
嘿嘿,学习了

使用特权

评论回复
9
冷漠| | 2010-1-22 13:13 | 只看该作者
本帖最后由 冷漠 于 2010-1-22 13:14 编辑

7楼,奥妙没看出来呢。
your_name.a51是宏汇编源代码,读懂它就知道宏汇编分段分模块编程策略。调试窗口已经将各个模块连接成一体,一个大模块,若是几万行的代码,把你看晕。

但是在项目窗口下的your_name.a51里却可以分模块修改,特别是由多个程序员共同完成的大的应用项目。调试窗口下能修改吗?谁教教我。——插入汇编码程序段?

使用特权

评论回复
10
呱唧呱唧| | 2010-1-22 18:06 | 只看该作者
显然没有定数噻

使用特权

评论回复
11
呱唧呱唧| | 2010-1-22 18:07 | 只看该作者
现在的硬件发展迅速,不是万不得已用C即可

使用特权

评论回复
12
NE5532| | 2010-1-22 20:02 | 只看该作者
测时间,研究具体多少语句没有太大意义,可以估计1行C=7行汇编。

使用特权

评论回复
13
xinzha| | 2010-1-23 10:20 | 只看该作者
这个不定,不能一概而论。跟架构相关,跟你的上下文相关,同时跟编译器的效率也相关。比如说在arm中一个32位立即数的加载指令的机器周期就可能是一条,也可能是两条。
很多相同功能的语句,如果编译器没有优化,不能的写**导致不一样的编译长度,例如for(i = 10; i > 0; i --)
的最终指令数就要少于for(i = 0; i < 10; i ++)
最准确的结果还是要看你最终编译出来的二进制文件的map表。

使用特权

评论回复
14
xinzha| | 2010-1-23 10:22 | 只看该作者
错字,是“不同的写fa”

使用特权

评论回复
15
冷漠| | 2010-1-23 10:27 | 只看该作者
很多相同功能的语句,如果编译器没有优化,不同的写法导致不一样的编译长度,例如for(i = 10; i > 0; i --)


没事呀?

使用特权

评论回复
16
xinzha| | 2010-1-23 10:59 | 只看该作者
很多相同功能的语句,如果编译器没有优化,不同的写法导致不一样的编译长度,例如for(i = 10; i > 0; i --)


没事呀?
冷漠 发表于 2010-1-23 10:27

两种写法都是正确的,不过在没有优化的情况下会有不同的编译长度。

使用特权

评论回复
17
idly_hui| | 2010-1-23 11:40 | 只看该作者
标记一下

使用特权

评论回复
18
nipeng119| | 2010-7-10 10:52 | 只看该作者
利用断点计算,在这条语句的前面加一个断点。运行程序,然后在你要计算的语句的后面加个断点。再运行,两次时间相减,就行了。查看时间,在keil软件上有,很精确的

使用特权

评论回复
19
mon200| | 2010-7-10 14:48 | 只看该作者
一般而言,我们所写的C程序都要放到相应的编译程序中去编译,但是一般编写的C程序很难一次就能编译成功,必须通过反复调试才能通过,我曾经使用过伟福系列仿真系统里面的编译和汇编都可以,而且,配合“程序时效分析功能”很容易知道你的每段程序的执行时间,然而此时最好把你的开发板和仿真器相连,采用硬件仿真,这样基本上可以知道所写程序的基本运行情况。
   当然,采用Keil uVision2的功能先将正确的C程序编译通过,再将生成的HEX文件通过反汇编成汇编语言,再计算每条语句的的执行时间,算出整个程序执行时间也可,但无论如何,你的程序执行时间一定取决于其所对应的硬件环境。

使用特权

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

本版积分规则

14

主题

32

帖子

0

粉丝