ZHCADC5A June 2013 – June 2020
类型适合单个 CPU 寄存器的实参在单个 CPU 寄存器中传递。
对于 MSP430 和 MSP430X,最高 16 位的类型在单个寄存器中传递。各种大小的指针类型也在单个寄存器中传递。
对于 MSP430X,当使用大型代码或大型数据存储器模型时,指针类型可以是 20 位,但 CPU 寄存器也是 20 位,因此指针值始终适合单个寄存器。对于非指针值,MSP430X CPU 寄存器被视为只有 16 位。其结果是,无论使用何种存储器模型,用于实现实参传递的寄存器对于 MSP430 和 MSP430X 都是相同的。
MSP430 和 MSP430X 示例:
C 源代码:
void func1(int a0, int a1, int a2, int a3);
int a0, a1, a2, a3;
void func2(void)
{
func1(a0, a1, a2, a3);
}
编译后的汇编代码:
MOV.W &a0,R12
MOV.W &a1,R13
MOV.W &a2,R14
MOV.W &a3,R15
; call instruction here
MSP430X 示例:
C 源代码:
void func1(int *a0, int *a1, int *a2, int *a3);
int a0, a1, a2, a3;
void func2(void)
{
func1(&a0, &a1, &a2, &a3);
}
在大型代码模型中编译:
MOVX.A #a0,R12
MOVX.A #a1,R13
MOVX.A #a2,R14
MOVX.A #a3,R15
; call instruction here