打印
[ZLG-ARM]

问213x启动文件问题

[复制链接]
1245|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xjtuer|  楼主 | 2008-1-19 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如下
1.先定义一个常量: ABT_STACK_LEGTH         EQU         0
2.分配空间 : AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4
3.堆栈空间最高地址:StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4

4.设置中止模式堆栈: MSR     CPSR_c, #0xd7
                       LDR     SP, StackAbt

请问最后SP指向的地址值是多少?

我用AXD看了一下,r13值是0x4000204C 这和fiq,und模式的值是一样的,能解释一下为什么是这个值吗?

相关帖子

沙发
xiuzhou| | 2008-1-21 10:00 | 只看该作者

问213x启动文件问题

因为ABT_STACK_LEGTH=0,所以执行完AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4后没有分配内存空间,返回给AbtStackSpace的是RAM中空闲内存的起始地址,按照你在AXD中R13的值,此时AbtStackSpace应该是0x40002050,然后再执行StackAbt           DCD     AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4就是你在R13中看到的值。

使用特权

评论回复
板凳
xjtuer|  楼主 | 2008-1-21 14:18 | 只看该作者

问213x启动文件问题

我不明白的一点是:

ABT_STACK_LEGTH是0,

ABT_STACK_LEGTH-1应该是0xFFFFFFFF ,

(ABT_STACK_LEGTH-1)*4相当于左移两位得到结果:0x3FFFFFFC,
AbtStackSpace的是RAM中空闲内存的起始地址0x40002050,那么加上0x3FFFFFFC后得到的值0x0000204c当然我知道这个结果是错的,但是怎么转移到了0x4000204C。

如果这样算(ABT_STACK_LEGTH-1)*4=ABT_STACK_LEGTH*4-1*4=4,
0x40002050-4=0x4000204c没问题。

是不是采用AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4这样的分配方式分配内存空间,只要ABT_STACK_LEGTH为0,不论我把AbtStackSpace      SPACE   ABT_STACK_LEGTH * 4这个语句放在什么地方,AbtStackSpace都指向RAM中空闲内存的起始地址吗??

多谢解答

使用特权

评论回复
地板
xiuzhou| | 2008-1-21 16:51 | 只看该作者

问213x启动文件问题

ABT_STACK_LEGTH-1)*4相当于左移两位得到结果:0xFFFFFFFC,至于是不是指向RAM中空闲内存的起始地址我也不是很明白

使用特权

评论回复
5
xjtuer|  楼主 | 2008-1-21 17:52 | 只看该作者

粗心啊~~~~

拿计算器算的,结果是0x3FFFFFFFC,少看了一个F,粗心啊~~~~~~



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

19

帖子

1

粉丝