- 用汇编编写程序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
- 用汇编编写程序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里面