查看: 4838|回复: 11

[其他] 每天解决一个问题3:for和while死循环的区别

[复制链接]
  • TA的每日心情
    郁闷
    2021-3-10 19:44
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    126

    主题

    525

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2023-12-25
    发表于 2015-8-27 09:10:39 | 显示全部楼层 |阅读模式
    一.综述:

    大家学单片机,都会用到主函数里面的超级循环:while(1),而这个while(1),就是判断括号中的是否为真,1为真,所以一直在此循环。但是,每次循环完一次,都会先判断一次括号里的1。有什么办法把这个步骤省掉呢?
    推荐一个指令:for(;;)就这样了。有没有人看到奥妙之处?因为for里面根本没有任何判断。所以编译器会把它优化,没有任何判断,直接执行for里面的语句,这才是真正的死循环。for(;;)比while(1)减少了每次判断一次的指令。
    (几个月前一个我和一个学长讨论过这个问题,他用反汇编给我演示了一次,可惜图片我找不到了。我不会反汇编。)

    结果是在PC机(VC反汇编)上的汇编指令是一条直接的MOV跳转指令,而在MDKwhile(1);for(;;)生成的汇编指令都是直接的一条sjmp指令。

    如果像是这样
    While(1)
    {
    }
    for(;;)
    {
    }
    这样呢?结果是while(1)生成了5行左右的汇编的指令,而for(;;)依旧是一条sjmp指令(MDK环境)。


    二:总结
        大家用循环的时候最好用for(;;),生成的代码量还能少一些,这也是一个小细节吧~(就是汇编多了4行代码,如果有强迫症的朋友。。看完之后估计你就会一直用for了)。


    我知道答案 目前已有11人回答

    评分

    参与人数 1NXP金币 +15 收起 理由
    小七 + 15

    查看全部评分

    很开心
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
    发表于 2015-8-27 09:15:29 | 显示全部楼层
    真的涨知识了,以后用来作为面试题也不错,哈哈哈,有意思,看完之后有种恍然大悟的感觉
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-3-10 19:44
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    126

    主题

    525

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2023-12-25
     楼主| 发表于 2015-8-27 09:16:16 | 显示全部楼层
    最后无事 发表于 2015-8-27 09:15
    真的涨知识了,以后用来作为面试题也不错,哈哈哈,有意思,看完之后有种恍然大悟的感觉 ...

    惭愧惭愧,可惜我不会反汇编,要不可以帖图。
    很开心
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5

    主题

    182

    帖子

    0

    高级会员

    Rank: 4

    积分
    703
    最后登录
    2017-4-26
    发表于 2015-8-27 09:23:18 | 显示全部楼层
    不错不错,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
    发表于 2015-8-27 09:25:40 | 显示全部楼层
    MDebug 发表于 2015-8-27 09:16
    惭愧惭愧,可惜我不会反汇编,要不可以帖图。

    反汇编很难的吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16702
    最后登录
    1970-1-1
    发表于 2015-8-27 09:34:53 | 显示全部楼层
    学习学习
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-8-27 09:48:35 | 显示全部楼层
    又学到知府了。 blank.png blank1.png blank2.png blank3.png blank4.png blank5.png blank6.png blank7.png blank8.png blank9.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19

    主题

    401

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1114
    最后登录
    2017-8-16
    发表于 2015-8-27 10:12:10 | 显示全部楼层
    在电脑上仿真的时候出现的那个有汇编代码的窗口  , 是不是反汇编?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-3-10 19:44
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    126

    主题

    525

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2018
    最后登录
    2023-12-25
     楼主| 发表于 2015-8-27 14:55:16 | 显示全部楼层

    没学过不清楚,听说是搞最底层开发和外挂开发才会用到,没学过汇编,只知道几条简单的指令。
    很开心
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    10
    最后登录
    2015-8-31
    发表于 2015-8-30 23:03:19 | 显示全部楼层
    学习啦,谢谢
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 12:14 , Processed in 0.110741 second(s), 32 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表