刚入手DSP汇编,想编个简单的测试程序运行下,功能是:主函数中用C,调用汇编文件中的功能函数两数相乘
编译出错: [E0002] Illegal mnemonic specified,下面是2个源文件,请帮看下,谢谢!
/*********main.c************/
#include <stdio.h>
void main()
{
int m,n,a;
m = 10;
n = 20;
a = MPY1(m, n);
printf("a=%d
",a);
}
/**********test.asm********/
.text
..globle _MPY1
_MPY1:
.asg A0, A_m
.asg A2, A_n;
MV .S1 A0, A6
MV .S1 A2, A4
LD .D1 *A4, A3
LD .D1 *A6, A5
MPY .M1 A3, A5, A7
NOP 2
.end
上面就是源程序了,第一次写,也不知道该怎么传递参数m,n。。。哪位兄弟出来帮解答下
[
本帖最后由 breeze505 于 2012-4-25 11:06 编辑 ]
此帖出自
小平头技术问答
非常感谢!现在大概明白了参数的传递,但还有问题请教下:
1. 在Register Usage表里,A0-A9/B0-B9是Parent,A10-A15是Child的,这里是Parent和Child代表什么呢?是不是说Parent是用来传递参数,而Child是用来做函数里中间变量计算?
2. 按你的指导,我代码修改如下
/*******main中*****/
void main()
{
int n,m,result[2],tmp;
m = 10;
n = 20;
tmp = MPY_1(m,n,result);
printf("result=%d,tmp=%d",result[0],tmp);
}
/*****asm文件*****/
.text
.global _MPY1
_MPY1:
B .S2 B3
MV .S1 A4, A0
MV .S1 B4, A1
MPY32 .M1 A0, A1, A7 ;m*n
STW .D1T1 A7, *+A6[0] ;把;m*n计算结果存到result中
MVK .S1 1, A4 ;返回1
NOP 2
但以上代码编译后执行结果:result = 0, tmp=1 为什么reslut不是想要得到的200呢,请帮忙看下
[ 本帖最后由 breeze505 于 2012-4-26 13:07 编辑 ]一周热门 更多>