所以我正在为MSP430FG4168编写一个简单的调用函数。并且它工作正常,除非返回到调用者,该函数只是在被调用函数的开头将其转储回来。
这是一个乘法函数,它取R13和R14中的值。
这是功能文件代码:
#include "MSP430.h"
Extern main ;allows the function to be aware of main
PUBLIC mult
zero DB 0;
RSEG CODE
mult:
PUSH R7; store the value of R7 on the stack for future reference
CLR R7
MOV R14, R7; R14's value will be used as a counter. R13 will be added the number of times specified in R14 and the final value will be stored in R14.
CLR R14
DEC R7
f_loop:
ADD R13, R14
DEC R7
CMP zero, R7
JGE f_loop;
f_end:
POP R7; bring the value of R7 BACK from the stack.
RET
END
“RET”是我的问题所在。它不是让我回到我的来电者,而是让我回到了mult的开头。发生了什么事?
答案 0 :(得分:0)
你可能会以某种方式弄乱调用者的寄存器集,或类似ISR的东西混乱堆栈(SP):RET
实际上不是430指令,而是实现为MOV @SP+,PC
,同样适用于POP
(MOV @SP+,destination
)。