AVR组装。获取逆和数组

时间:2018-07-18 00:57:17

标签: assembly avr

如果您输入数组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

1 个答案:

答案 0 :(得分:0)

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

也就是说,您push r24r25print_array的开头,但从未pop

因此,当您在第六次迭代中将-1读入r24时,您将跳转到done:并返回,除了弹出堆栈的有效代码地址外,您将弹出r25中的所有内容,然后转到该位置。可能不会很好地结束。