You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Simpletron机器语言实现1-10计数循环的问题求助

问题诊断与修复方案

你的核心问题是循环终止条件未正确触发,导致计数器(内存12)无限制递增直至溢出。以下是具体分析和修复步骤:

常见错误原因

  • 循环条件判断逻辑错误:比如使用了错误的跳转指令(如用BRANCHNEG替代BRANCHZERO),或者比较后的跳转目标错误。
  • 上限值未正确配置:存储终止值(10)的内存地址未正确赋值,导致比较永远不成立。
  • 指令操作数指向错误:加载或比较时引用了错误的内存地址,使得终止条件无法被检测到。

修复后的Simpletron机器语言代码

以下是实现从1计数到10的正确代码,注释标注了每一步的作用:

1012    // LOAD 12       ; 加载计数器(内存12初始值为1)到累加器
0112    // WRITE 12      ; 输出当前计数器值
2013    // ADD 13        ; 累加器加1(内存13存储常量1)
1112    // STORE 12      ; 将更新后的计数器值存回内存12
1014    // LOAD 14       ; 加载上限值10(内存14存储10)到累加器
2112    // SUBTRACT 12   ; 计算「10 - 当前计数器」,结果存累加器
4207    // BRANCHZERO 07 ; 如果结果为0(计数器等于10),跳转到终止指令
4000    // BRANCH 00     ; 否则跳回循环开头
4300    // HALT          ; 程序终止
0001    // 内存地址12: 计数器初始值1
0001    // 内存地址13: 增量常量1
0010    // 内存地址14: 上限值10

关键修复点说明

  • 确保内存14正确存储上限值10:这是循环终止的判断基准。
  • 使用SUBTRACT 12计算上限与计数器的差值,通过BRANCHZERO检测是否相等:当计数器等于10时,差值为0,触发跳转终止程序。
  • 循环跳转目标正确:未满足终止条件时,跳回循环起始位置(地址00)。

调试建议

  1. 开启Simpletron的单步调试模式(如果你的模拟器支持),逐行执行指令,观察累加器和内存12、14的数值变化。
  2. 检查原代码中比较后的跳转指令:若你使用了BRANCH(无条件跳转)替代BRANCHZERO,会导致循环永远无法终止。
  3. 确认内存12的初始值是否为1,且在每次增量后正确存回该地址。

内容的提问来源于stack exchange,提问作者Brett Hartley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:07:13