单片机本质——函数参数传递

2019-04-15 18:10发布

● IDE : RENESAS CubeSuiteW+● MCU : RL78/G13

1 单参数函数

       1.1 C代码

void func(int arg1){ int m,n; m = arg1 + 2; n = m - 3; NOP(); } void main(void) { func(0xF1); while (1); }

    1.2 反汇编



    1.3 分析

在func()的主调函数调用func()时:1)首先将实参0xF1写入通用寄存器AX,利用寄存器传递参数2)跳转到函数体3)将参与函数体内部运算相关的通用寄存器HL压栈4)将用于参数传递的AX压栈(参数入栈区,此栈地址即为形参arg1的分配地址) 5)将栈指针向下移动两字后的地址写入HL寄存器(形参arg1的分配地址向下依次代表函数本地变量m,n的地址)6)之后便利用通用寄存器AX和HL执行函数体运算,实现函数功能7)执行完函数体后,将栈指针返回到函数体用到的通用寄存器HL的压栈地址,栈数据出栈归还HL8)最后执行返回RET

    1.4 栈空间分配如下表


2 多参数函数

    未完待续。。。