C调用汇编

316 阅读1分钟
  1. 用汇编编写程序1s.S,实现函数 int sum(int n),计算1+2+3+….+n的值,编写c程序1c.c,调用sum函数,计算sum(5),并将结果存入内存地址为0x20009000处。
extern int sum(int n);
void _start(void) 
{
    int s;
    s = sum(5);
    *(int *)0x20009000 = s;
}
.global sum
sum:
   mov r1, #1
   mov r2, #0
for: 
   cmp r1, r0
   bgt endfor
   add r2, r2, r1
   add r1, r1, #1
   b for
endfor:
   mov r0, r2
   mov pc, lr
  1. 用汇编编写程序2s.S,实现函数 usigned lrsp(int flag),当flag=1时返回寄存器lr的值,为0时,返回寄存器sp的值。并用c编写主程序2c.c, 调用函数lrsp(0),将返回结果打印出来,打印格式为“ sp=0x3578fa”。(已知uboot将printf函数加载到内存地址为0x2fd17b18处)。
extern unsigned lrsp(int flag);
int (*myprint)(char *,...) = (int(*)(char*, ..))0xfd17b18;
void _start(void) 
{
    unsigned val;
    val = lrsp(0);
    myprint("sp=%x\n", val);
}
.global lrsp
lrsp:
	cmp r0, #1
    moveq r0,lr
    movne r0,sp
    mov pc,lr
#  返回的值放在r0里面