C调用汇编
1、 用汇编编写程序1s.S,实现函数 int sum(int n),计算1+2+3+….+n的值,编写c程序1c.c,调用sum函数,计算sum(5),并将结果存入内存地址为0x20009000处。
答案:
(1)汇编语言
.text
.global sum
sum:
mov r1,#1
mov r2,#0
for:
cmp r1,r0
bgt m
add r2,r2,r1
add r1,r1,#1
b for
m:
mov r0,r2
mov pc,lr
(2)C语言
int sum(int n);
void _start(void)
{
int s=0;
s=sum(5);
*(( int * )(0x20009000))=s;
}
2、用汇编编写程序2s.S,实现函数 usigned lrsp(int flag),当flag=1时返回寄存器lr的值,为0时,返回寄存器sp的值。并用c编写主程序2c.c, 调用函数lrsp(0),将结果存于0x20009000处。
答案:
(1)汇编语言
.text
.global lrsp
lrsp:
cmp r0,#1
moveq r1,lr
cmp r0,#0
moveq r1,sp
mov r0,r1
mov pc,lr
.end
(2)C语言
unsigned lrsp(int flag);
void _start(void)
{
unsigned result=0;
result=lrsp(0);
*(( int * )(0x20009000))=result;
}