有关设置栈指针sp寄存器r13

为什么在调用C程序时,要在汇编(.S)文件中设置栈指针sp(Stack Pointer) r13?还有设置栈指针的时候赋的值是多少时如何确定的。

.text
.global _start

_start:

	/* 设置内存: sp 栈 */
	ldr sp, =4096 /* nand启动 */
//	ldr sp, =0x40000000+4096 /* nor启动 */
	
	/* 调用main */
	bl main

halt:
	b halt


为什么要nand启动设置成4096,nor启动设置为0x40000000+4096?


1.SDRAM的地址是 0x30000000 - 0x40000000。

2.Nand启动时,片内4K RAM基地址为0(在0地址处),Nor Flash不可访问。

3.Nor启动时,片内RAM地址为0x4000 0000,片内RAM在0x4000 0000往后的4k 此时的栈顶可以设置到内存的上限 0x40000000 + 4k(4096)。

4. 调用C函数时,返回地址、局部变量一般都保存在栈里,所以调用C程序时要设置栈指针
5. 之所以设成4096,是由于S4C2410、S3C2440从NAND Flash启动时,它的内部4K RAM的地址为0~4095,可以把栈指针指向最后──其实你也可以指向0~4095中间某个位置,只要不破坏要运行的代码就可以

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值