在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1885|回复: 0

分析下这段程序,真的很考人

[复制链接]
发表于 2007-12-19 18:42:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
这本程序是从龚俊S3C44BO_BIOS中的一个小段程序,实在是看不懂,那位能分析下???


if((prog_begin==0)&&overwrite0) {
   unsigned int ins;
  
   ins = *(unsigned int *)data_begin;   
   if((ins>>24)==0xea)   // instruction: b xxxx, now just support b instruction!!!   
    bios_load_addr = ((ins&0xffffff)<<2)+8;
   else
    bios_load_addr = 4;  // other instruction, jump to 4
            
   bios_load_addr = (bios_load_addr-BIOS_LOAD-8)/4;
   bios_load_addr = (bios_load_addr&0xffffff)|0xea000000;     
   
   *(unsigned int *)data_begin = 0xea000000+(BIOS_BASE-8)/4;   
  
   modify_a0 = 1;
  }
  cache_cfg = rNCACHBE0;
  rNCACHBE0 = 0x20000000;
  SectorProg(prog_begin, (unsigned short *)data_begin, size);

  if(modify_a0) {
   size = FlashSector(size-1)+SECTOR_SIZE;   
  
   FlashRead(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);   
   *(unsigned int *)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4) = bios_load_addr;
   SectorProg(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);
  }
  rNCACHBE0 = cache_cfg;
}
对if(modify_a0) {
   size = FlashSector(size-1)+SECTOR_SIZE;   
  
   FlashRead(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);   
   *(unsigned int *)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4) = bios_load_addr;
   SectorProg(FlashSector(BIOS_LOAD), (unsigned short *)(DFT_DOWNLOAD_ADDR+size), SECTOR_SIZE);
  }
这一段实在是不明白. *(unsigned int *)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4) = bios_load_addr;
放一条跳转指令.跳去那里?
BIOS_LOAD这个地址是怎样来的??
各位解释下,实在是看不懂.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-3 10:48 , Processed in 0.027357 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表