各位大虾,小弟刚接触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+代码长度 |