ARM 汇编与 C语言混合编程案例:计算1-9的阶乘和

问题在这里插入图片描述

编程

效果在这里插入图片描述

结果

在这里插入图片描述

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值