仿写C++逻辑的Pep9汇编代码循环输出多11问题排查
问题原因
你的推测完全正确,问题出在循环跳转指令的逻辑和C++参考代码不匹配:
- C++代码的循环判断是
while (number < limit),等价于只要number大于等于10就终止循环 - 你当前使用的
BRGT endwh指令的触发条件是number的值严格大于10才会跳出循环,等于10时仍会进入循环体执行自增、输出逻辑,所以多输出了11。
修复方法
只需要将循环处的跳转指令从BRGT endwh修改为BRGE endwh即可:BRGE指令的触发条件是累加器的值大于等于比较值时跳转,刚好匹配C++循环的终止判断逻辑,当number等于10时会直接跳出循环,不会执行后续的自增和输出操作。
修改后的循环段代码如下:
while: LDWA number,s CPWA limit,i ;对应while (number < limit)判断 BRGE endwh ;number >= 10时直接跳出循环 ADDA 1,i STWA number,s DECO number,s STRO msg2,d BR while endwh: STRO msg3,d
修改后输入5的运行结果为6 7 8 9 10,和C++代码运行结果完全一致。
内容的提问来源于stack exchange,提问作者JoshuaRHitchcock
相关产品推荐
相关产品推荐

