查看反汇编代码,在执行protected_write_io函数时,可以看到是使用了R20、R22、R24、R25这几个working寄存器。所以猜想可能是编译器特定的操作。意思就是会将函数的形参用R20、R22、R24这种普通寄存器保存。验证:
新建一个3个参数的函数,发现在反汇编窗口看到的汇编代码也是使用R20、R22、R24 结论: 所以得出函数调用所使用的working寄存器是一样的,不会变。所以在protected_io.S文件中汇编代码中使用的working寄存器固定为R20、R22、R24、R25。再解释下为会汇编文件protected_write_io反汇编后会发现有4个寄存器(R20、R22、R24、R25),这是因为使用了指针的形式,指针在8位单片机中是使用16位来表示的,所以需要2个8位的寄存器来保存。
|