打印

2410的启动过程的疑惑

[复制链接]
1807|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tc9148|  楼主 | 2009-3-29 22:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
---LDR r0, =|Image$$RO$$Base| /*RO段起始地址*/
---LDR r1, =|Image$$RO$$Limit| /*RO段结束地址*/
---LDR r2, =|Image$$RW$$Base|
---LDR r3, =|Image$$RW$$Limit|
---/*分别求出需要映像的代码和数据的长度并累加,放到寄存器R1中*/
---SUB r1, r1, r0
---SUB r3, r3, r2
---ADD r1, r1, r3
---/*将需要映象的代码和数据复制到RAM中去*/
---0 /*标示符*/
---LDR r3, [r0], #4
---STR r3, [r2], #4
---SUBS r1, r1, #4
---BNE %B0 /*如果没有复制完,跳转到0标示符处的汇编语句,继续复制,参见ARM指令帮助手册*/


三种输出段的起始和终止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit


-->
我的疑惑是:一个存储在代码段的映像文件包括RO,RW,RZ三部分,其中的RW应该代码段中可读写的数据段,但是在STR r3, [r2], #4这句中怎么又变成了RAM区的起始地址了?
难道是RW身兼两职?既代表了代码段的可读写部分,又含有将要复制到的RAM区的起始地址?

相关帖子

沙发
tc9148|  楼主 | 2009-3-30 13:09 | 只看该作者

这里的版主能否详解一下。

使用特权

评论回复
板凳
seekfor| | 2009-3-30 13:45 | 只看该作者

前提是你的rw base刚好设置为RAM开始地址

使用特权

评论回复
地板
tc9148|  楼主 | 2009-3-30 21:22 | 只看该作者

楼上的答案不满意,继续顶上来。

使用特权

评论回复
5
Ice_River| | 2009-3-31 11:10 | 只看该作者

怎么才能满意呢?

用AXD 仿真一下全都看清楚了。这段代码就是将RW作为复制的目标地址进行代码搬移!

使用特权

评论回复
6
tw2835| | 2009-3-31 12:21 | 只看该作者

~^^^^^^^

---SUB r1, r1, r0
---SUB r3, r3, r2
---ADD r1, r1, r3
---/*将需要映象的代码和数据复制到RAM中去*/
---0 /*标示符*/
---LDR r3, [r0], #4
---STR r3, [r2], #4
---SUBS r1, r1, #4
---BNE %B0 ]
如果按照3楼说的 我怎么不理解r1的空间长度呢
r0 r1 r2是连续的么?
怎么按照我的理解应该是:
SUB r1, r1, r0
//SUB r3, r3, r2
//ADD r1, r1, r3
---/*将需要映象的代码和数据复制到RAM中去*/
---0 /*标示符*/
---LDR r3, [r0], #4
---STR r3, [r2], #4
---SUBS r1, r1, #4
---BNE %B0 ]//就是把起始地址为r0长度为r1空间的数据 复制到地址为r2的内存单元中

使用特权

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

本版积分规则

137

主题

589

帖子

1

粉丝