ZHCADC5A June 2013 – June 2020
对于 MSP430 和 MSP430X,可能会将一个 32 位实参在栈和存储器之间拆分。如果实参要在寄存器对中传递,但只有一个寄存器可用(始终为 R15),则编译器将在 R15 和栈上的一个寄存器大小的位置之间拆分该实参。
MSP430 和 MSP430X 示例:
C 源代码:
void func1(int a0, long a1, long a2);
int a0;
long a1, a2;
func2(void)
{
func1(a0, a1, a2);
}
编译后的汇编代码:
SUB.W #2,SP
MOV.W &a0, R12
MOV.W &a1+0,R13
MOV.W &a1+2,R14
MOV.W &a2+0,R15
MOV.W &a2+2,0(SP)