| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2324 人关注过本帖
标题:您认为这道题目的结果应该是什么?
只看楼主 加入收藏
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
你找到门路了,此生可教
此题给函数传入3.0和3.1得出的结果迥异得让C老手都感到惊异;此时,从汇编代码看看方能很快明白其个中道理。

以下是引用playmyself在2010-7-29 12:54:15的发言:

080483b4 <sqr>:
double sqr(x) {
 80483b4:    55                       push   %ebp
 80483b5:    89 e5                    mov    %esp,%ebp
 80483b7:    83 ec 04                 sub    $0x4,%esp    #这里双精度应该偏移8个就对了
    return (x*x);
 80483ba:    8b 45 08                 mov    0x8(%ebp),%eax
 80483bd:    0f af 45 08              imul   0x8(%ebp),%eax
 80483c1:    89 45 fc                 mov    %eax,-0x4(%ebp)
 80483c4:    db 45 fc                 fildl  -0x4(%ebp)
}
 80483c7:    c9                       leave

 80483c8:    c3                       ret   


080483c9 <main>:

int main(void)
{
 80483c9:    55                       push   %ebp
 80483ca:    89 e5                    mov    %esp,%ebp
 80483cc:    83 e4 f8                 and    $0xfffffff8,%esp
 80483cf:    83 ec 18                 sub    $0x18,%esp
    double ret;
    ret = sqr(3.0);
 80483d2:    dd 05 b0 84 04 08        fldl   0x80484b0
 80483d8:    dd 1c 24                 fstpl  (%esp)
 80483db:    e8 d4 ff ff ff           call   80483b4 <sqr>
 80483e0:    dd 5c 24 10              fstpl  0x10(%esp)
    return 0;
 80483e4:    b8 00 00 00 00           mov    $0x0,%eax
}开始以为是9,调试了下的确是0.
2010-09-04 13:18
快速回复:您认为这道题目的结果应该是什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033528 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved