ARM汇编语言与C语言混合编程(part1)

汇编语言调用C语言

题目:用汇编语言调用C语言实现21!(21的阶乘)
实验软件:ARM Developer Suite V1.2
步骤:创建两个文件,一个.s文件,一个.c文件,顺序无所谓,但要在一个project里;
test.s:web

EXPORT test
 	AREA test,CODE,READONLY
 	IMPORT CFUN               
 	ENTRY
 	CODE32
START
	MOV R0,#21
	BL CFUN
STOP
	B STOP
END

main.capp

long long CFUN(int a){    //函数返回类型和result类型都要是long long int,注意阶乘结果很大,一个寄存器放不下。
	long long result=1;
	int i=1;
	for(i;i<=a;i++)
		result=result*i;
	return result;
}

汇编调用C时,函数参数用寄存器传,默认从R0开始,大于4个的参数要用堆栈指针传;C函数返回值默认放在R0中,运行后查看寄存器结果便可(此题结果过大,一个放不下,R0放阶乘结果的低位,R1放结果的高位)svg

运行结果:
在这里插入图片描述此文章本人原创,若有问题底部留言,若有转载请标明出处。 --HurryChen函数

Happy   Coding!
                           *\( ^ v ^ )/*