ququ
驱动小牛
驱动小牛
  • 注册日期2001-07-02
  • 最后登录2007-12-26
  • 粉丝0
  • 关注0
  • 积分342分
  • 威望35点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:2299回复:0

浅谈ccs中c与汇编的混合调用

楼主#
更多 发布于:2002-05-13 10:01
看到别的同志写的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
  
  

游客

返回顶部