MSP430中的“RET”把我带到了错误的地方?

时间:2015-06-14 20:13:29

标签: assembly return msp430 function-call

所以我正在为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的开头。发生了什么事?

1 个答案:

答案 0 :(得分:0)

你可能会以某种方式弄乱调用者的寄存器集,或类似ISR的东西混乱堆栈(SP):RET实际上不是430指令,而是实现为MOV @SP+,PC,同样适用于POPMOV @SP+,destination)。