LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1029|回复: 1

请问在汇编中调用c代码时,堆栈指针的设置方法

[复制链接]
发表于 2006-10-15 11:41:36 | 显示全部楼层 |阅读模式
我是在自己的硬件板子上移植bootloader
运行stage1之后需要转入c代码调用stage2的main函数以进行后续的系统初始化工作。
但是main函数的堆栈指针sp的设置让我很迷茫,参考代码片段如下所示:

  1. @ get read to call C functions
  2. ldr        sp, DW_STACK_START        @ setup stack pointer
  3. mov        fp, #0                        @ no previous frame, so fp=0
  4. mov        a2, #0                        @ set argv to NULL

  5. bl        main                        @ call main
复制代码

以上是开发板上bootloader中对应部分的代码,可是开发板的内存是64M,而我自己的板子内存设计只有32M,经过cpu内存管理映射过的内存起始地址为:0x30000000。DW_STACK_START的值是0x33de8000,0x02000000是32M,所以DW_STACK_START这个地址远超过32M内存的范围。我在移植测试中忘记了修改这个地址值,但是bootloader仍然可以正常运行!
所以我很奇怪——
1.是sp的设置无关紧要还是我对内存管理的理解有问题呢?
2.如果按照这个地址设置堆栈,那么就会覆写其他bank,这难道也没有问题么?
请大家不吝指教,谢谢~!
 楼主| 发表于 2006-10-19 18:59:18 | 显示全部楼层
没人知道么?自己顶一下了^_^
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表