如果您输入数组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
答案 0 :(得分:0)
据我所知,您的问题出在print_array
中。我不清楚它应该做什么,因为我看不到它可以打印任何东西。
也就是说,您push
r24
和r25
在print_array
的开头,但从未pop
。
因此,当您在第六次迭代中将-1
读入r24
时,您将跳转到done:
并返回,除了弹出堆栈的有效代码地址外,您将弹出r25
中的所有内容,然后转到该位置。可能不会很好地结束。