题目:用汇编语言调用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 ^ )/*