阅读:2353回复:0
浅谈ccs中c与汇编的混合调用
看到别的同志写的dsp中的一些问题,我也遇到过,看来这可能是大家的普遍问题。兴之所至,也把我遇到的小问题拿出来供大家交流。
在ccs中,参数的传递不像x86那样完全由堆栈来完成而是一部分有堆栈来实现一部分又寄存器实现,仅以ti的芯片为例(堆栈由大到小增长,motolola堆栈由小向大增长)。 参数传递: 跟x86相似,参数从右至左传递,但第一个参数一定放在A中。 由于参数传递使用堆栈,所以st1中cpl位一定要设置位1,即用sp来寻址参数,而不能用DP作为基址来寻址参数。这点很重要。 例:int Example(int a,int b,int c) 相应汇编代码如下: st c的值,1h st b的值,0h /*此是b,地址sp calld _Example ld a的值,0,A c调汇编函数int Example(int a,int b,int c): c中声明:extern int Example(int a,int b,int c); 汇编中声明: .def _Example 调用:Example(5,4,3); 汇编中调C: 汇编中声明:.ref _Example c中声明:由于c中只要不定义为static的话 都是public,所以c中不用单独来声明函数为public. 调用: st 4,0h st 3,1h calld _Example ld 5,0,A |
|