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

MARIE汇编实现数组和为K元素对查找 索引引用异常排查

MARIE 整数对查找程序索引错误修复

核心错误梳理

  • 变量定义混乱:重复定义One/one/onee三个存值为1的变量,MARIE汇编对标识符大小写敏感,部分引用取值错误。
  • 指针未重置:数组打印流程结束后,Indexposition已经指向数组末尾后的内存地址,没有重置回数组基地址就直接进入查找循环,起始寻址位置完全错误。
  • 地址计算逻辑缺失:双循环的下标i``j没有做「数组基地址+下标偏移」的换算,间接寻址取数时访问的是错误内存位置,根本拿不到对应数组元素。
  • 条件判断与输出错误:相等匹配的跳转逻辑写反,找到结果后输出的是跑飞的地址值,不是实际的元素下标;内层循环每次启动没有重置j的初始值为i+1,循环边界判断错误会越界访问。

修正后可运行代码

// 程序起始地址
ORG     100
// --------------------------
// 第一步:输入数组大小,填充数组
// --------------------------
INPUT 
STORE   ArraySize
OUTPUT    
LOAD    Arr
STORE   Indexposition
CLEAR
STORE   index
GetVal, LOAD  ArraySize
SUBT    index
SKIPCOND 800    // AC>0即index < ArraySize时跳过跳转,继续填值
JUMP    Print
INPUT
STOREI  Indexposition
LOAD    Indexposition
ADD     incr
STORE   Indexposition
LOAD    index
ADD     incr
STORE   index
JUMP    GetVal
// --------------------------
// 第二步:打印已输入的数组做校验
// --------------------------
Print, LOAD  Arr
STORE   Indexposition
CLEAR
STORE   index
PrintVal, LOAD   ArraySize
SUBT    index
SKIPCOND 800
JUMP    InputK
LOADI   Indexposition
OUTPUT
LOAD    Indexposition
ADD     incr
STORE   Indexposition
LOAD    index
ADD     incr
STORE   index
JUMP    PrintVal
// --------------------------
// 第三步:输入目标值K,开始双循环查找
// --------------------------
InputK, INPUT 
STORE   Kvalue
CLEAR
STORE   i   // 外层循环i从0开始
// 外层循环:i从0到n-2
OuterLoop, LOAD  i
SUBT    ArraySize
SKIPCOND 000    // i < ArraySize时跳过结束跳转,继续循环
JUMP    EndProg
// 计算A[i]地址:基地址Arr + i
LOAD    Arr
ADD     i
STORE   addrI
// 内层循环j从i+1开始
LOAD    i
ADD     incr
STORE   j
InnerLoop, LOAD  j
SUBT    ArraySize
SKIPCOND 000    // j < ArraySize时跳过内层结束跳转,继续循环
JUMP    OuterNext
// 计算A[j]地址:基地址Arr +j
LOAD    Arr
ADD     j
STORE   addrJ
// 计算A[i]+A[j],和K做比较
LOADI   addrI
ADDI    addrJ
SUBT    Kvalue
SKIPCOND 000    // 和小于K,跳过匹配成功跳转
SKIPCOND 800    // 和大于K,跳过匹配成功跳转
JUMP    Found   // 只有和等于K时执行跳转
// 没匹配到,j自增继续内层
LOAD    j
ADD     incr
STORE   j
JUMP    InnerLoop
OuterNext, LOAD  i
ADD     incr
STORE   i
JUMP    OuterLoop
// --------------------------
// 找到结果,输出i、j下标
// --------------------------
Found, LOAD  i
OUTPUT
LOAD    j
OUTPUT
HALT
EndProg, HALT

// 变量定义区
index,          dec 0
i,              dec 0
j,              dec 0
Indexposition,  hex 0
ArraySize,      dec 0
incr,           dec 1
Arr,            hex 28  // 数组基地址,从0x28开始存元素
Kvalue,         dec 0
addrI,          dec 0
addrJ,          dec 0

验证说明

用题目给出的测试用例验证:

  • 输入数组大小6,依次输入元素3/7/11/5/-2/1
  • 输入目标K值12
  • 程序会依次输出1和3,对应Num[1]=7、Num[3]=5,和为12,符合预期。
  • 逻辑严格对应给出的C++双循环实现,不会重复使用同一个元素,题目约定有唯一解时会直接输出对应下标停机。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:54:21