在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
例子:
原始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
相关文章推荐
- dsp优化-线性汇编中调用全局变量
- 如何在Linux环境下编DSP的汇编或线性汇编程序
- ARM汇编与C语言混合编程之汇编调用C函数
- 汇编函数与C函数的相互调用
- 在汇编代码中调用C函数
- 汇编函数与C函数的相互调用(2)
- 汇编调用C函数要设置栈的原因
- gcc内嵌汇编调用C函数
- arm汇编程序调用C函数之参数传递
- matlab如何调用C函数(转载)
- 为何汇编里调用C函数需要堆栈,而汇编语言的函数的调用却不需要堆栈
- c语言中如何调用汇编程序
- DSP汇编"ZERO.L2 B0"机器码0427,如何解析?
- arm汇编如何调用函数,如何写延迟函数
- dsp线性汇编的一个课件
- php调用C函数时如何使用zend_parse_parameters
- 如何在VC中汇编,调用Nasm编写的函数
- C++程序中如何调用C函数
- 如何在VC中汇编,调用Nasm编写的函数
- 汇编调用C函数--利用堆栈传递参数