因为想在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我平拼搏了一晚上也没解决,希望您能指点一下。
谢谢!