---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区的起始地址? |