Assembly avr组件。求逆和数组

Assembly avr组件。求逆和数组,assembly,avr,Assembly,Avr,如果您输入数组12345-1 输出应该是15 14 12 9 5 我有seg的毛病。我做错了什么 .global reverse_prefix_sum reverse_prefix_sum: ld r24, X+ cpi r24, -1 breq done2 push r24 call reverse_prefix_sum pop r22 add r24, r22 adc r25, r23 st Y+, r24

如果您输入数组
12345-1

输出应该是
15 14 12 9 5

我有seg的毛病。我做错了什么

    .global reverse_prefix_sum

reverse_prefix_sum:

    ld r24, X+
    cpi r24, -1
    breq done2
    push r24
    call reverse_prefix_sum
    pop r22
    add r24, r22
    adc r25, r23
    st Y+, r24

    jmp 1f


done2:
    ldi r24, 0
    clr r25

1:
    ret



    .global print_array

print_array:

    push r24
    push r25
    clr r25
    ld r24, X+
    cpi r24, -1
    breq done
    call print_array

done:
    clr r25
    ldi r24, 10

2:
    ret

据我所知,您的问题在
打印数组中。我不清楚它应该做什么,因为我没有看到它打印任何东西

也就是说,您在
print_array
开始时
push
r24
r25
,但之后从不
pop
它们

因此,当您在第六次迭代中将
-1
读入
r24
时,您将分支到
done:
并返回,除了不弹出堆栈的有效代码地址之外,您将弹出
r25
中的任何内容并转到那里。这可能不会有好的结局