您的位置:首页 > 其它

在DSP 线性汇编中可否调用C函数,如何调用

2008-07-20 17:02 225 查看
求助: 在DSP 线性汇编中可否调用C函数,如何调用?
例子:
原始C函数(经过简化)如下:

short compute(const short *x, int n)
{
int i;
sum = 0;
for (i=0;i<n;i++) {
sum = sum + x[i]*x[i];
}
return sum/n;
}

除法函数如下;
short divi_compute(int a, short b){
return (short) a/b;
}

欲将其转化为汇编函数,由于汇编中没有专门的除法指令,故想在汇编函数中调用C函数,不知道可否行通,谢谢大家指点:

汇编函数如下:

.sect ".text:_compute"
.global _compute
_compute .cproc EXC, N
.no_mdep
.reg A_0, A_1, A_2, A_3, A_4, A_5, SUM, CNT_N

SHR N, 2, CNT_N
SUB CNT_N, 1, CNT_N
LOOP_compute: .trip CNT_N
LDDW *EXC++, A_1:A_0
MPY A_0, A_0, A_2
|| MPYH A_0, A_0, A_3
|| MPY A_1, A_1, A_4
|| MPYH A_1, A_1, A_5
ADD A_2, A_3, A_0
|| ADD A_4, A_5, A_1
ADD A_0, A_1, A_0
ADD SUM, A_0, SUM
[CNT_N] BDEC LOOP_compute, CNT_N

; 注:不知道如何实现 sum/n 这个功能,望大家指点
.return
.endproc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: