循环结构在机器级通过条件跳转指令回跳实现:在循环体末尾用条件跳转指令跳回循环起始位置(或条件判断处),形成循环。
MOV R1, 0 ; 初始化 i = 0
L1: CMP R1, n ; 判断 i < n
JGE L2 ; i >= n 则退出循环
; 循环体代码
ADD R1, 1 ; i++
JMP L1 ; 跳回循环条件判断
L2: ; 循环结束后的代码
L1: CMP R1, n ; 判断条件
JGE L2 ; 条件不满足则退出
; 循环体
JMP L1 ; 跳回判断
L2:
L1: ; 循环体
CMP R1, n ; 判断条件
JL L1 ; 条件满足则继续循环
| 循环类型 | 条件判断位置 | 至少执行一次 | 对应汇编模式 |
|---|---|---|---|
| for | 循环开始 | 否 | 初始化 + 条件判断在前,更新在后 |
| while | 循环开始 | 否 | 条件判断在循环体前 |
| do-while | 循环结束 | 是 | 条件判断在循环体后 |
| 考法 | 解题套路 |
|---|---|
| 给定 C 循环写汇编 | 转为初始化→判断→循环体→更新→跳回的模式 |
| 读汇编还原 C 代码 | 找条件跳转的回跳点,确定循环边界 |
| 循环次数分析 | 分析循环变量的初始值、终止条件、步长 |
| 循环优化识别 | 识别循环不变量外提、强度削弱等优化 |
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。