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