程序映象结构

先贴出程序:

文件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

     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值