0

如果输入数组1 2 3 4 5 -1

输出应该是15 14 12 9 5.

我遇到了段错误。我究竟做错了什么?

    .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
4

1 回答 1

0

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

就是说,你push r24r25一开始,print_array但从来没有pop他们。

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

于 2018-07-18T02:32:24.497 回答