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

LC3汇编数组查找程序存在目标元素仍返回未找到问题求助

LC3数组查找程序错误排查

你的程序存在多处逻辑错误,和R2的基地址赋值无关,具体问题如下:

  • 返回值赋值错误:需求要求R1返回匹配元素的地址,但原代码使用LDR R1, R2, #0把R2地址中存储的元素值写入了R1,应该直接把R2本身的值(即元素地址)赋值给R1。
  • 匹配成功后未退出循环:匹配到目标值后没有主动跳转到EXIT结束流程,会继续执行后续的指针移动和遍历逻辑,导致匹配结果被覆盖。
  • 未匹配时未移动数组指针:原逻辑只有在匹配到元素的时候才会执行ADD R2, R2, #1移动指针,未匹配时直接跳回LOOP开头,R2永远不会更新,要么出现死循环,要么永远无法遍历到后续元素。
  • 指针自增位置错误:数组指针的自增操作应该放在每轮元素比较完成后执行,未匹配时就移动指针进入下一轮遍历,匹配成功时直接退出不需要移动。

修正后的完整代码

;
; Subroutine to search for a value in an array
; Input: 
;  - R2: the base array address
;  - R3: the number of elements in the array
;  - R4: the value to look for
; Output: in R1, the address of the found value, or zero if nothing was found

.ORIG 0x300
NUM_1: .FILL 0x032
NUM_2: .FILL 0x00A
NUM_3: .FILL 0x009
NUM_4: .FILL 0x025
N: .FILL 0x004
SEARCH_VALUE: .FILL 0x032

LEA R2, NUM_1
LD R3, N
LD R4, SEARCH_VALUE

FIND: 
        AND R1, R1, #0    ; Zero out R1 in case we find nothing
        ADD R3, R2, R3    ; We turn R3 from the number of elements of the array into
                      ; the address of the word just past the end of the array
    
LOOP:
        NOT R5, R3
    ADD R5, R5, #1
    ADD R5, R5, R2 

    BRZ EXIT ; if (R2==R3), traverse complete
    LDR R5, R2, #0
    NOT R5, R5
    ADD R5, R5, #1
    ADD R5, R4, R5
    BRZ MATCH ; if equal, jump to match logic
    ADD R2, R2, #1 ; not match, R2++
    BR LOOP ; continue loop

MATCH:
    ADD R1, R2, #0 ; assign element address to R1
EXIT:
        HALT
        .END

修正说明

  1. 新增了MATCH分支专门处理匹配成功的逻辑,匹配到直接跳转到该分支,把R2的地址赋值给R1后结束程序。
  2. 未匹配时先移动R2指针再进入下一轮循环,保证可以遍历所有数组元素。
  3. 保留了原有的边界判断逻辑,遍历到数组末尾时直接退出,R1保持初始的0值,符合未找到返回0的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:54:03