晚上好,我正在尝试调用一个基本功能,同时抓住我已经传入SP的论据。当我调用该函数时,堆栈指针会改变其值,一切都变得疯狂。我在网上看到的每个例子都没有谈到调用函数时堆栈指针的变化。我做错了吗?
这是我的代码:
;SP is initialized, SP = $21FF
;Pushing values to stack using r16
ldi R16, $44 ;wordH
push r16 ;SP = $21FE
ldi R16, $42 ;wordL
push r16 ;SP = $21FD
ldi R16, $02 ;byte
push r16 ;SP = $21FC
rcall dostuff
nop
done: rjmp done
;------Function------; (Function gutted for StackExchange)
dostuff: ;Call multiply, SP = $21F9
pop r17 ;Stuff gets wonky here
pop r18
pop r19
loop:
dec r17
breq return
rjmp loop
return:
ret
由于某种原因,当我调用该函数时,SP从$ 21FC变为$ 21F9。我是否错误地将参数传递给堆栈?或堆栈指针是否更改以保留信息?如果是这样我应该如何将参数传递给堆栈?