龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 10278|回复: 37

MIPS汇编

[复制链接]
发表于 2008-12-1 09:41:50 | 显示全部楼层 |阅读模式
我想在c语言中调用MIPS汇编子程序,但是在编译的时候总是出错,请高手指教,谢谢了!!
以下为程序和编译过程
//test.c
#include <stdio.h>
int addtest(int a,int b);
int main()
{
int a,b,c;
a=1;
b=2;
c=addtest(a,b);
printf("a+b=%d\n",c);
return 0;
}
//addtest.s
.text
.global _addtest
.ent _addtest
_addtest:
addu $2,$4,$5
j $31
.end _addtest

//编译过程
mipsel-linux-gcc -o test addtest.s test.c
//出现的错误:
test.c.text+0x38):undefined reference to 'addtest'
collect2:ls returned 1 exit status
发表于 2008-12-1 13:48:05 | 显示全部楼层
可能要在link的时再合一起
发表于 2008-12-1 15:26:31 | 显示全部楼层
一个最简单的方法
先写个addtest.c
gcc -S addtest.c
然后修改addtest.s
 楼主| 发表于 2008-12-1 20:18:50 | 显示全部楼层

TO zhllg

你好,你这样做有什么意思吗?怎样才能自己写汇编,然后编译呢!我只是举了一个简单的例子,我想通过这个例子来学习c语言是如何调用汇编的,和汇编是如何编写的!!!
谢了!
发表于 2008-12-2 09:14:50 | 显示全部楼层

回复 1# 的帖子

你有个小小笔误哦!看加粗的地方,再改改试试!
//test.c
//
#include <stdio.h>
int _addtest(int a,int b);
int main()
{
int a,b,c;
a=1;
b=2;
c=_addtest(a,b);
printf("a+b=%d\n",c);
return 0;
}
mipsel-linux-gcc addtest.o test.o -o test
./test
a+b=3

[ 本帖最后由 qjivy 于 2008-12-2 09:24 编辑 ]
发表于 2008-12-2 09:34:48 | 显示全部楼层
感谢邱吉同学,哈哈哈
发表于 2008-12-2 09:52:31 | 显示全部楼层
原帖由 tianwei007888 于 2008-12-1 20:18 发表
你好,你这样做有什么意思吗?怎样才能自己写汇编,然后编译呢!我只是举了一个简单的例子,我想通过这个例子来学习c语言是如何调用汇编的,和汇编是如何编写的!!!
谢了!


你这个.s写的极其之不规范
是真的
function的prologue, epilogue全都没有
根本不能用
o32/n32/n64这些名词你看着眼熟么?
你真应该编译一个.s出来看看,真正的用户层程序的汇编是怎么写的

先模仿,再创造
一步步来,不用急

最后,其实用户层程序里基本不会出现整个的汇编语言文件
最多是inline asm
 楼主| 发表于 2008-12-2 15:11:20 | 显示全部楼层

To qjivy

To qjivy:
  谢谢你的提示,改了就对了,但是有一些汇编子程序在定义时,其前面都有个“_”
可能MIPS汇编不需要。可能是编译器的不同(猜!)!谢谢了,共同学习啊!
 楼主| 发表于 2008-12-2 15:15:50 | 显示全部楼层

TO zhllg

TO zhllg
你好,谢谢你的建议。我用-S编译过一些简单的函数,但是我觉得有些是编译器来做的,并不用自己来编写。
o32/n32/n64这是一些规范吗??ABI,看过一点,但是主要看了参数的传递,和堆栈的使用等等!!说实话不太明白,请指教!!
发表于 2008-12-3 18:42:45 | 显示全部楼层
原帖由 qjivy 于 2008-12-2 09:14 发表
你有个小小笔误哦!看加粗的地方,再改改试试!
//test.c
//
#include
int _addtest(int a,int b);
int main()
{
int a,b,c;
a=1;
b=2;
c=_addtest(a,b);
printf("a+b=%d\n",c);
return 0;
}
mipsel- ...

你现在在分部还是北京啊?

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-9-22 07:31 , Processed in 0.204014 second(s), 19 queries .

快速回复 返回顶部 返回列表