TASM汇编编程:跳转至自定义标签后如何返回循环继续执行?
汇编逻辑修复说明
核心问题
你使用的jl条件跳转指令不会自动保存返回地址,执行完check标签下的累加逻辑后,CPU会按内存地址顺序向后执行其他指令,没有逻辑引导它回到循环流程,自然无法继续循环。
修复方案1:调整执行流顺序(推荐,无需子程序调用)
mov [Sum], 0 mov cx, [N] mov ax, 1 ForI: cmp ax, 10 jl check jmp inc_step ; 不满足小于10的条件时,跳过累加直接走递增逻辑 check: add [Sum], ax inc_step: inc ax loop ForI
修改说明:
- 新增
inc_step标签统一存放循环变量递增逻辑,所有分支最终都会走到该节点 - 不满足判断条件时直接跳转到递增步骤,满足条件时执行累加后自动顺序执行递增步骤
- 如果你实际要判断的是
ax小于N而非小于10,把cmp ax, 10改成cmp ax, [N]即可
修复方案2:改用子程序调用实现返回
如果你需要把累加逻辑拆成独立复用的模块,可以用call+ret的子程序调用组合,这类调用会自动压栈保存返回地址,执行完子程序后自动回到跳转前的位置继续运行:
mov [Sum], 0 mov cx, [N] mov ax, 1 ForI: cmp ax, 10 jl do_add jmp inc_step do_add: call check ; 调用累加子程序,自动保存下一条指令地址 inc_step: inc ax loop ForI ; 其他主程序逻辑... ; 独立累加子程序 check: add [Sum], ax ret ; 自动回到call指令的下一条位置执行
内容的提问来源于stack exchange,提问作者Utis
相关产品推荐
相关产品推荐

