先贴出程序:
文件1
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
IMPORT Main
AREA Start,CODE,READONLY
ENTRY
CODE32
Reset LDR SP,=0x40003f00
;初始化C程序的运行环境
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
B Main
END
文件2
#define uint8 unsigned char
#define uint32 unsigned int
#define N 100
uint32 sum;
void Main(void)
{
uint32 i;
sum=0;
for (i = 0; i < N; ++i)
{
/* code */
sum+=i;
}
while(1);
}
程序入口:0x8000
结合程序,程序映像组成顺序:
1.main()函数
2.汇编程序
3.在0x806c处,代码段结束,0x8070~0x8084处放的是程序用到的标号(ro段)
arm的寄存器立即寻址,都要先转化成寄存器寻址,过程类似于程序使用标号
4.0x8080处ro段结束,接下来存入rw段,但是,|Image$$RO$$Limit|比ro段要多1个单位值
5.接下来是rw段,rw段包zi段(sum是可读可写的)
6.,|Image$$ZI$$Limit|比zi段多1个单位值
参考:http://blog.csdn.net/yongan1006/article/details/8519716