堆栈指针偏移量:在将参数传递给堆栈时调用函数

时间:2017-02-04 01:37:43

标签: assembly avr

晚上好,我正在尝试调用一个基本功能,同时抓住我已经传入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。我是否错误地将参数传递给堆栈?或堆栈指针是否更改以保留信息?如果是这样我应该如何将参数传递给堆栈?

0 个答案:

没有答案