在arm的启动代码startup.s中,有这样一段代码<br />; Build enviroment for C <br />IMPORT |Image$$RO$$Limit| <br />IMPORT |Image$$RW$$Base|<br />IMPORT |Image$$ZI$$Base|<br />IMPORT |Image$$ZI$$Limit|<br /><br />LDR R0,=|Image$$RO$$Limit| <br />LDR R1,=|Image$$RW$$Base| <br />LDR R3,=|Image$$ZI$$Base|<br />CMP R0,R1<br />BEQ LOOP1 <br /> <br />LOOP0 <br />CMP R1,R3 <br />LDRCC R2,[R0],#4 <br />STRCC R2,[R1],#4 <br />BCC LOOP0 <br /> <br />LOOP1<br />LDR R1,=|Image$$ZI$$Limit|<br />MOV R2,#0<br />LOOP2 <br />CMP R3,R1 <br />STRCC R2,[R3],#4 <br />BCC LOOP2 <br /> <br />; 进入 the C code<br /> IMPORT __main<br /> LDR R0, =__main<br /> BX R0<br /><br />我也上网搜了一些资料,知道ro,rw,zi,加载域,运行域的一些概念<br />但是还是有些地方不太明白,<br />为何我的启动代码中没有这个ro/rw搬运代码,也可以运行?<br />2,跳转到main函数,为何有的用<br /> import main<br /> ldr r0,=main<br /> mov r14,pc<br /> bx r0<br />而有的用<br /> IMPORT __main<br /> LDR R0, =__main<br /> BX R0<br />网上的资料:汇编代码的指令为 b __main, 编译器在跳转到main之前还要作一系列的工作,这其中就包括对运行环境的初始化<br />按照这个意思,如果是用b __main的话就可以不要rw搬运代码,如果用b main的话,就必须有搬运代码吗?<br /><br />谢谢指教 |
|