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
中的任何内容并转到那里。这可能不会有好的结局