汇编调用C
1、用c编写函数 int jc(int n),其功能是返回n!,保存为1c.c,编写汇编程序1s.S,调用jc函数,计算5!,并将结果存入0x20009000处。
答案:
(1)C语言
int jc(int n)
{
int i,ans=1;
for(i=1;i<=n;i++)
{
ans=ans*i;
}
return ans;
}
(2)汇编语言
.text
.global _start
_start:
mov r0,#5
bl jc
ldr r1,=0x20009000
str r0,[r1]
.end
结果:
0x78即120
2、用c编写函数int sixadd(int a,int b,int c,int d,int e,int f),其功能是返回ab+cd+e*f的值,并保存为2c.c, 用汇编语言编写程序2s.S, 在汇编语言中调用sixadd函数,计算sixadd(1,2,3,4,5,6)的值,并将计算结果保存到内存0x20009000处,sixadd函数的参数值由汇编程序传入。
答案:
(1)C语言
int sixadd(volatile int a,int b,int c,int d,volatile int e,volatile int f)
{
return a*b+c*d+e*f;
}
(2)汇编语言
.text
.global _start
_start:
mov r0,#1
mov r1,#2
mov r2,#3
mov r3,#4
mov r5,#5
mov r6,#6
ldr sp,=0x20008000
stmfd sp!,{r5,r6}
bl sixadd
ldr r1,=0x20009000
str r0,[r1]
ldmfd sp!,{r5,r6}
.end
结果
0x2C,即44