打印

长期困惑:keil编译时,为何在LST当中的汇编代码和实际的对不

[复制链接]
3442|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoohoo|  楼主 | 2007-10-11 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
keil 编译时,为何有时候会多出突然代码很大,而在lst文件当中没有出现很大的代码?

比如:
void main(void)
{
    char i;
    char *ptr="1";
    *(char **)i=ptr;
}
这一段代码编译,0级优化,代码说是157Byte。
而这一段代码:
void main(void)
{
    char i;
    char *ptr="1";
    (char *)i=ptr;
}
0级优化,是42Byte。

但是对比了生成的汇编代码,差别了仅仅10个直接左右,为什么显示的代码量的变化和实际看到的汇编代码量的变化会有这么大的区别?


另外,请问一下,用keil的软调试时,点击调试就跳入到了main函数里面,但是这个时候,好像前面好像有程序运行过了,因为sp意见被置为0x30了,我想完全的从0x0000地址开始运行的话,该如何做?

相关帖子

沙发
ayb_ice| | 2007-10-12 10:28 | 只看该作者

语句都不一样有可能

使用特权

评论回复
板凳
yoohoo|  楼主 | 2007-10-15 11:00 | 只看该作者

喂~~,你们在哪里?

help me~~!

使用特权

评论回复
地板
computer00| | 2007-10-15 11:16 | 只看该作者

也许还有些汇编代码你没看到......

使用特权

评论回复
5
yoohoo|  楼主 | 2007-10-15 14:16 | 只看该作者

那要如何才能看到全部的汇编代码?

如果要全部看到汇编代码该如何做?
我就向看看为什么会增大特别多。

使用特权

评论回复
6
lyhui1976| | 2007-10-15 17:33 | 只看该作者

把优化级别降到最低

使用特权

评论回复
7
沈老| | 2007-10-15 20:49 | 只看该作者

差别在LCALL ?C?PSTPTR

Code 大的是因为调了库函数LCALL   ?C?PSTPTR,(C函数,指针页内存).你可以在"debug"看"?C?PSTPTR"有多长.

使用特权

评论回复
8
computer00| | 2007-10-15 21:24 | 只看该作者

软件仿真,单步运行,你就可以看到多了哪些了。

使用特权

评论回复
9
yoohoo|  楼主 | 2007-10-16 13:20 | 只看该作者

仔细看了看debug的运行,的确调用了?C?PSTPTR

单步运行的确看到了那个pstptr是比较大的一块code,多谢各位。

另外,再请问一下,用keil编译时,如果用到了库函数的名称,比如strcpy,会调用库函数,如何让keil编译时,不调用任何库函数?那个startup.a51也不去调用,该如何设置?

使用特权

评论回复
10
yoohoo|  楼主 | 2007-10-16 13:26 | 只看该作者

虽然在选择device时,我没有选择startup.a51,但是~~~

虽然我在选择device时,没有选择startup.a51,但是,好像keil编译时会选择这个编译,好像,因为有一个程序,我没有做任何设置,但是sp确被设置成了0x30,默认sp应该在0x07的,我记得。


其实就是想编的程序能够尽量的透明一些,不要加入一些多余的东西。

使用特权

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

本版积分规则

11

主题

46

帖子

0

粉丝