11-20三种循环

DEBUG版本下的三种循环表现形式

do ... while

在汇编中表现的形式和if十分相似,不同的地方在于if是一个向下跳的结构,do...while是一个向上跳的过程。
代码定式:

  DO_BEGIN:
      ........         ;循环语句块
       jxx  DO_BEGIN
  DO_END:

while

while和do...while相反,执行循环语句块之前,必须要进行条件判断,根据比对结果选择是否执行循环语句块。

while循环里会有两次跳转

  • 第一次:条件判断(反条件)是否执行循环体

  • 第二次:无条件向上跳
    代码定式:

    WHILE_BEGIN:
        jxx  WHILE_END
        ......          ;循环体
        jmp WHILE_BEGIN
    WHILE_END:
    

FOR

for循环由赋初始值,设置循环条件,设置循环步长三步组成,同事debug版本的代码由三跳组成。

  • 第一跳:条件比较(反条件)跳转

  • 第二跳,第三跳:jmp跳转
    代码定式:

        mov mem/reg, xxx    ;赋值
        jmp FOR_CMP
    FOR_STEP:
        ........        ;修改循环变量
    FOR_CMP:
        ........         ;循环条件判定
        jxx  FOR_END
    FOR_BODY:
        .......         ;循环体
        jmp  FOR_STEP
    FOR_END:
    

RELEASE版本对循环的三种优化

第一种

如果while或for中的条件判断环节在常量扩散优化后必成立,优化成do...while

do...while只使用一次跳转,大大提高了效率

如果循环条件不能预知,会优化成if里套一个do...while

  if
  {
      do
      {

      }whiel(...)
  }

结果从两跳优化成了一跳,大大提高了效率,还原的时候判断if的条件和do...while的条件是否具有相关性来酌情还原成while或for

第二种

代码外提

有利于流水线的优化,如果循环条件和循环体代码无关,那么条件代码会外提,循环条件里如果有函数,编译器不会做任何优化,只能人工优化。

第三种

强度削弱优化

只有一种情况会触发
循环体里的乘法结果呈线性增长,优化成加法。


continue和break的区别

  • continue:上跳,还在循环块内
  • break:下跳,出循环体
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 38,125评论 8 114
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,155评论 0 9
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,452评论 0 17
  • 大家或多或少都应该了解一些人工智能的事,也应该有听说过无人驾驶、无人超市这样的人工智能下的产物,这些东西会成为一个...
    只是社会性动物阅读 940评论 0 2
  • 愿你我既可以朝九晚五,又能够浪迹天涯。 很久之前顺手写过一首短诗,里面有一段是这样的“只是听说了, 潮水是涌上岸的...
    木兰溪阅读 276评论 0 1

友情链接更多精彩内容