问题
编程
效果
结果
resultSum.c
主函数,函数入口。
初始化数组,调用arm程序,打印结果
#include<stdio.h>
extern int asmFac(int n);
extern void summing(int *arg1);
int main(void)
{ int j;
int fac[10]={0};
summing(fac);
printf("The total sum is %d\n",fac[0]);
for(j=1;j<10;j++){
printf("%d\t",fac[j]);
}
}
asmFac.s
计算n的阶乘,返回结果
EXPORT asmFac
AREA ASMFILE, CODE, READONLY
asmFac
mov r1,r0 ;r1 = n
loop
subs r1,r1,#1
mulgt r0,r1,r0
bgt loop
mov pc,lr ;asmFac子程序返回
END
summing.s
循环调用asmFac.s,求1-9的阶乘和
EXPORT summing
IMPORT asmFac
AREA SUMMING,CODE,READONLY
summing
STMFD SP!,{R4-R5}
mov r1,#9 ;相当于cal_fn 最大阶乘数字
mov r2,#1 ;from 1-9
add r3,r0,#4 ;指向fac[1]
mov r5,#0
loop
cmp r1,r2
blt back
STMFD SP!,{R0-R3,lr} ;保存指定寄存器
mov r0,r2
bl asmFac ;调用阶乘函数
mov r4,r0
ldmfd SP!, {R0-R3,lr}
str r4,[r3]
add r3,r3,#4
add r5,r5,r4
add r2,r2,#1
b loop
back
str r5,[r0] ;将计算所得存入fac[0]中
ldmfd SP!,{R4-R5}
mov pc,lr
END
运行
debug之后,打开了axd
注意事项
运行前确保axd 和codewarrior大小端序一致,如何设置大小端序参考:
https://blog.csdn.net/Julse/article/details/105513326