MASM汇编语言直角三角形程序spaces1循环无限循环问题求助
MASM汇编直角三角形第三个图形空格循环无限问题排查方向
检查
spaces1循环的计数器计算逻辑
第三个三角形的空格数逻辑应为每行空格数 = 输入值 - 当前行号 - 1(假设行号从0起始),当行号等于输入值-1时,空格数应为0,循环需直接退出。如果你的计算式错误(比如写成输入值 - 当前行号),此时会得到1,若循环内计数器递减逻辑出错,就会触发无限循环。另外要注意:如果计数器初始为0,执行dec后会变成无符号超大值,jnz会持续跳转,导致循环停不下来。验证行号变量的边界控制
第三个三角形的总行数等于输入值,行号应从0到输入值-1(共输入值行)。如果行号递增到等于输入值,此时计算空格数会得到负数,汇编中无符号处理负数会转为超大正数,直接导致spaces1循环无限执行。检查你的行号递增逻辑,确保在达到输入值时终止外层行循环。核对循环跳转指令的正确性
如果你用loop指令实现空格循环,要确认CX寄存器没有被其他代码意外篡改;如果是手动用dec + jnz实现,注意跳转条件的判断逻辑:当计数器为0时,dec后会变为-1,jnz(无符号非零判断)会认为条件成立,继续循环。这种情况下应该先判断计数器是否为0,再进入循环,或者改用有符号跳转指令(比如js)。单步调试关键变量
用MASM调试工具在spaces1循环入口设断点,查看每行的空格数计数器(比如CX或自定义寄存器)的初始值,以及每次循环后的变化和跳转判断结果。同时确认行号变量的值是否在合法范围内,定位到底是计算错误还是跳转逻辑出错。
内容的提问来源于stack exchange,提问作者Nicholas Davies
相关产品推荐
相关产品推荐

