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

汇编程序循环无法终止求助:输入数字后循环超10仍运行

问题分析与修复方案

核心错误:循环终止条件判断逻辑错误

你的程序无法终止的根本原因是SKIPCOND 000的使用完全偏离需求:

  • SKIPCOND 000的作用是当累加器(AC)值小于0时,跳过下一条指令
  • 而需求是当X < 10时继续循环,需要判断X与10的大小关系,而非判断X是否为负数

修复步骤

1. 新增常量10的定义

在代码末尾添加用于比较的常量:

TEN, DEC 10      / 常量10

2. 修正循环条件判断

替换原有的条件判断代码块:

LOAD X           / 加载X的值
SKIPCOND 000     / 若AC<0(X小于10),则继续循环
JUMP ENDLOOP     / 若X不小于10,则终止循环

改为:

LOAD X           / 加载当前X的值
SUB TEN          / 计算X - 10,结果存入AC
SKIPCOND 000     / 若AC < 0(即X < 10),跳过下一条JUMP指令,继续循环
JUMP ENDLOOP     / 若AC >= 0(即X >= 10),跳转到循环结束处

3. 调整计数器初始值(满足输入5时输出迭代次数10的需求)

原代码计数器初始为固定值1,输入5时循环6次后计数器为7,不符合输出10的要求。需要将计数器初始值设为用户输入的X值:
替换原代码中的:

LOAD ONE         / 加载常量1
STORE Counter    / 将其存入Counter内存单元

改为:

LOAD X           / 加载用户输入的X值
STORE Counter    / 将输入值作为计数器初始值

完整修复后的代码

ORG 400          / 起始地址为400

INPUT            / 获取用户输入的数字
STORE X          / 将输入值存入内存单元X

LOAD X           / 加载用户输入的X值
STORE Counter    / 将输入值作为计数器初始值

LOOP, LOAD X     / 加载X的值
OUTPUT           / 显示当前X的值

ADD ONE          / 将X自增1
STORE X          / 存储更新后的X值

LOAD Counter     / 加载当前计数器值
ADD ONE          / 将计数器自增1
STORE Counter    / 存储更新后的计数器值

LOAD X           / 加载当前X的值
SUB TEN          / 计算X - 10
SKIPCOND 000     / 若X < 10,跳过JUMP指令继续循环
JUMP ENDLOOP     / 若X >= 10,终止循环

LOAD Counter     / 加载最终计数器值
OUTPUT           / 显示计数器值

ENDLOOP , HALT   / 终止程序

X, DEC 0         / X的内存单元(初始化为0)
Counter, DEC 0   / Counter的内存单元(初始化为0)
ONE, DEC 1       / 常量1
TEN, DEC 10      / 常量10

验证结果

输入5时,程序会依次输出:

5
6
7
8
9
10
10

完全符合需求,且循环会在X等于10时正确终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:17:17