TI中文支持网
TI专业的中文技术问题搜集分享网站

求教:CCS5.5中C语言如何调汇编?

因为想在TMS320C6678上实现C语言调用汇编,所以先用软件仿真。C和汇编如下:

1、C语言部分

#include<stdio.h>
extern int addfunc();
void main()
{
addfunc();
}

2、汇编部分

.global _addfunc
_addfunc:
MVK.L1 1,A3
STW.D2T1 A3,*B15[3]

MVK.L1 2,A3
STW.D2T1 A3,*B15[4]

MVK.L2 0,B4
STW.D2T2 B4,*B15[5]

LDW.D2T2 *B15[3],B4
NOP 4
ADD.L2X B4,A3,B4
STW.D2T2 B4,*B15[5]

编译后出现如下错误:

由于我不会汇编,这些命令是通过C语言反汇编得出的。在工程里我添加了一个.asm文件。

因网上没有看见相关教程,时间又很紧迫,非常希望能够得到帮助!不知是什么原因出错了呢?

如果要学习汇编的命令,应该看手册的哪个章节(英文挺差的,不知该从何看起)?谢谢您了!

Andy Yin1:

参考附件的例程,其中有在c代码main中调用汇编。

Perking SU:

回复 Andy Yin1:

你好,您的程序我测试了一下,运行非常好,不过我想问一下您是如何实现C语言和汇编之间的参数传递的呢?根据我的理解,一般使用.cproc来传递,但是请问您是怎么实现的?

根据程序和测试结果,数据是通过A4和B4传入两个数组地址,如果使用A3、B3或者其他的通用寄存器,结果都是不对的。请问为什么必须使用A4和B4呢?

谢谢你!

Perking SU:

回复 Andy Yin1:

你好,您的程序我测试了一下,运行非常好,不过我想问一下您是如何实现C语言和汇编之间的参数传递的呢?根据我的理解,一般使用.cproc来传递,但是请问您是怎么实现的?  根据程序和测试结果,数据是通过A4和B4传入两个数组地址,如果使用A3、B3或者其他的通用寄存器,结果都是不对的。请问为什么必须使用A4和B4呢?

谢谢你!

Perking SU:

回复 Andy Yin1:

你好,我现在自己写了一个加法的汇编程序,然后使用C来调取,能够成功编译和运行,但是当我将这个代码放到一个比较大的C++工程里的时候,程序却一直报识别不到函数名的错误,请问该如何解决呢?

我的测试程序如下

我的CPP工程截图如下所示,其中未打开的文件夹都是大量的CPP类以及实现:

我的主函数为:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "TAppDecTop.h"extern "C" int asm_add(int a ,int b);bool g_md5_mismatch = false; ///< top level flag that indicates if there has been a decoding mismatch// ====================================================================================================================
// Main function
// ====================================================================================================================int main(int argc, char* argv[])
{int a=5;int b=4;int i=0;i=asm_add(a,b);printf("i:%d\n",i);return EXIT_SUCCESS;}

提示的错误是这样的:

 undefined first referencedsymbolin file--------- ----------------asm_add./TAppDecoder/decmain.objerror #10234-D: unresolved symbols remain
error #10010: errors encountered during linking; "Dm642Hevc2.out" not built

我平拼搏了一晚上也没解决,希望您能指点一下。

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 求教:CCS5.5中C语言如何调汇编?
分享到: 更多 (0)