0

我一直在尝试找出以下代码...我知道这是解决方案:代码在向量的元素上实现了递归函数,该函数在一个寄存器中传递,而大小在另一个寄存器中传递一,但是我似乎无法理解如何做到这一点。

    s_r:
ADD SP, SP, -8
BNE A1, 0, ALTRO
ADD V1, 0, 0
ADD SP, SP, 8
MOV R15,R14

ALTRO:
ADD A1, A1, -1
LSL R8, A1, 2
ADD R8, R8, A2
LDR R8, [R8]
STR RA, [SP,4]
STR R8, [SP]

BL s_r

LDR R8, [SP]
LDR RA, [SP+4]
ADD SP, SP, 8
ADD V1, R8, V1
MOV R15,R14

我认为我理解所有单独发生的指令,唯一的一点我不确定 LDR R8,[R8] 。我在堆栈的某个地方读到它等于 len(r8) 意味着它是一个数组?我也对所有添加感到困惑,因为它们不使用 # 这意味着 -8 不是数字而是什么?我认为添加 sp,sp,-8 "在堆栈上再为 2 个空间腾出空间" 。这是一个错误吗?即使这是一个错误,当我尝试破译它时,我也会得到这样的结果:

#it's a function?
some function:
    while(a1!=0):
        a1=a1-1
        r8=a1*4+a2
        r8=get an element of an array
        push (r8,ra)
    v1=v1+0
    load r8 and ra from stack ( last values)
    pop them from stack
    v1=r8+v1
    return 

据我所知,它是从数组中取出元素(从最后一个开始)并将其与 RA 一起放入堆栈,我不明白那是什么?最大的问题是无论我做什么我都会得到一种循环而不是递归函数

如果有人有任何想法或提示,任何东西都会受到赞赏,因为我无法在任何地方找到解决方案并且我一直坚持下去。

4

0 回答 0