打印

2440int.s是不是有问题呢,还是我理解错了。

[复制链接]
1401|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cainiao402|  楼主 | 2010-3-8 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾,小弟刚接触ARM的。有很多问题都不懂。现在分析2440的init.s源程序。发现问题如下,不知道是我太菜理解错了还是什么。现在想请各位大虾指正一下。
copy_proc_beg
adr r0, ResetEntry                             ;ResetEntry值->r0
ldr r2, BaseOfROM                          ;BaseOfROM值(后面有定义)->r2
cmp r0, r2                                          ;比较r0和r2
ldreq r0, TopOfROM                         ;如果相等的话(在内存运行),TopOfROM->r0
beq InitRam                                     ;同时跳到InitRam

ldr r3, TopOfROM  
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0
/******************************************************************************

问题就是下面这两句程序
我觉得r2里面的值已经不是BASEOFROM了
因为上面的:stmia r2!, {r4-r7}里r2的值已经改变了
所以:“sub r2, r2, r3  ;r2=BaseOfROM-TopOfROM=(-)代码长度 ”
就不对了啊。经过上面的循环复制r2的值应该是=r3的值才对啊。
呵呵。这是我的理解。难到它们还有其他的奥妙。
*******************************************************************************/
sub r2, r2, r3  ;r2=BaseOfROM-TopOfROM=(-)代码长度   
sub r0, r0, r2 ;r0=ResetEntry-(-)代码长度=ResetEntry+代码长度

相关帖子

沙发
cainiao402|  楼主 | 2010-3-8 13:28 | 只看该作者
怎么没人理呢?

使用特权

评论回复
板凳
cainiao402|  楼主 | 2010-3-8 17:19 | 只看该作者
顶上去。
高手指导一下啊,呵呵。

使用特权

评论回复
地板
cainiao402|  楼主 | 2010-3-9 08:41 | 只看该作者
在顶

使用特权

评论回复
5
ShakaLeo| | 2010-3-9 08:52 | 只看该作者
楼主应该贴个完整一些的代码,而且
“ldr r3, TopOfROM  
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}”
怎么第二行还有个零,这能顺序执行下去吗?呵呵

使用特权

评论回复
6
dwq175| | 2010-3-9 10:54 | 只看该作者
r2是一个指针,只是r2指向的值改变了。

使用特权

评论回复
7
cainiao402|  楼主 | 2010-3-13 16:40 | 只看该作者
R2是指针?楼上的大虾能不说的更明白点呢?
cmp r2, r3
bcc %B0
这两句就可以看的出R2里的值已经是改变了的。不然的话也不会往下执行了。
怎么下面就突然来个
sub r2, r2, r3  ;r2=BaseOfROM-TopOfROM=(-)代码长度   
呢?
这样的话上下就矛盾了啊。我还是觉的有问题的这个程序。
分析过2440int.s的高手出手吧。

使用特权

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

本版积分规则

99

主题

238

帖子

2

粉丝