do-while循环下图实现了对x变量的二进制数中1的个数的统计do-while语句先执行循环代码,然后进行判断(不管条件是否满足,至少执行一次)说明:shrq指令是逻辑右移。当移位操作只有一个操作数时,默认移位数为1。ret指令是处理返回指令。break和return语句相当于跳转指令。rep指令是一个字符串操作指令,当不涉及字符串相关操作时,rep指令如果与其他指令一起使用,相当于一个空指令。这样做的意义在于流水线优化,因为连续的两条跳转指令排列在一起可能会影响流水线的性能,所以中间被空指令隔开的while循环的两种汇编语言模式需要判断循环条件是否在进入循环体之前。设置一个叫做jump-to-middle的汇编模式,使用-Og编译器优化选项得到类似do-while,只是在第一个循环之前有一个跳转语句跳转到条件判断位置进行判断,然后进入循环,如下图所示。缺点:执行前需要两次跳转,频繁跳转会导致系统性能下降。另一种编码模式是while模式,在使用-o1编译器优化选项时类似于do-while,但是在循环前做循环条件检查优点:进入循环前不需要跳转,减少跳转次数和提高了时间效率,但是代码量会更多for循环由三个子语句组成:第一个子语句只会在循环之前执行,会完成循环变量的基本初始化。第二个子语句将用于检测循环条件。第三个子语句将用于更新循环变量。会在每个循环体结束和进入下一个循环之前执行(第一次进入循环不会执行)下图将for循环转化为while循环,进一步转化为do-while循环,最后将其转换为goto语句。for循环被转化为一个等价的while循环i=0来初始化循环变量。在循环体之后,执行循环更新语句。在一些for循环中,编译器可以做进一步的优化。由于wsize是一个常量,所以i初始化为0也是一个常量,所以i
