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

[复制链接]
2869|5
 楼主| eagle758 发表于 2007-12-19 18:35 | 显示全部楼层 |阅读模式
AD, IO, se, bios, os
这段程序是从龚俊S3C44BO_BIOS中的一个小段程序,实在是看不懂,那位能分析下???<br /><br /><br />if((prog_begin==0)&&overwrite0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;ins;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ins&nbsp;=&nbsp;*(unsigned&nbsp;int&nbsp;*)data_begin;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;if((ins&gt&gt24)==0xea)&nbsp;&nbsp;&nbsp;//&nbsp;instruction:&nbsp;b&nbsp;xxxx,&nbsp;now&nbsp;just&nbsp;support&nbsp;b&nbsp;instruction!!!&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bios_load_addr&nbsp;=&nbsp;((ins&0xffffff)&lt&lt2)+8;<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;bios_load_addr&nbsp;=&nbsp;4;&nbsp;&nbsp;//&nbsp;other&nbsp;instruction,&nbsp;jump&nbsp;to&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;bios_load_addr&nbsp;=&nbsp;(bios_load_addr-BIOS_LOAD-8)/4;<br />&nbsp;&nbsp;&nbsp;bios_load_addr&nbsp;=&nbsp;(bios_load_addr&0xffffff)|0xea000000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)data_begin&nbsp;=&nbsp;0xea000000+(BIOS_BASE-8)/4;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;modify_a0&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;cache_cfg&nbsp;=&nbsp;rNCACHBE0;<br />&nbsp;&nbsp;rNCACHBE0&nbsp;=&nbsp;0x20000000;<br />&nbsp;&nbsp;SectorProg(prog_begin,&nbsp;(unsigned&nbsp;short&nbsp;*)data_begin,&nbsp;size);<br /><br />&nbsp;&nbsp;if(modify_a0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;FlashSector(size-1)+SECTOR_SIZE;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;FlashRead(FlashSector(BIOS_LOAD),&nbsp;(unsigned&nbsp;short&nbsp;*)(DFT_DOWNLOAD_ADDR+size),&nbsp;SECTOR_SIZE);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4)&nbsp;=&nbsp;bios_load_addr;<br />&nbsp;&nbsp;&nbsp;SectorProg(FlashSector(BIOS_LOAD),&nbsp;(unsigned&nbsp;short&nbsp;*)(DFT_DOWNLOAD_ADDR+size),&nbsp;SECTOR_SIZE);&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;rNCACHBE0&nbsp;=&nbsp;cache_cfg;<br />}<br />对if(modify_a0)&nbsp;{<br />&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;FlashSector(size-1)+SECTOR_SIZE;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;FlashRead(FlashSector(BIOS_LOAD),&nbsp;(unsigned&nbsp;short&nbsp;*)(DFT_DOWNLOAD_ADDR+size),&nbsp;SECTOR_SIZE);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;*(unsigned&nbsp;int&nbsp;*)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4)&nbsp;=&nbsp;bios_load_addr;<br />&nbsp;&nbsp;&nbsp;SectorProg(FlashSector(BIOS_LOAD),&nbsp;(unsigned&nbsp;short&nbsp;*)(DFT_DOWNLOAD_ADDR+size),&nbsp;SECTOR_SIZE);&nbsp;<br />&nbsp;&nbsp;}<br />这一段实在是不明白.&nbsp;*(unsigned&nbsp;int&nbsp;*)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4)&nbsp;=&nbsp;bios_load_addr;<br />放一条跳转指令.跳去那里?<br />BIOS_LOAD这个地址是怎样来的??<br />各位解释下,实在是看不懂.
whereis 发表于 2007-12-19 18:46 | 显示全部楼层

.

打个电话,问问龚俊不就得了。<br />
 楼主| eagle758 发表于 2007-12-19 19:55 | 显示全部楼层

re

龚俊的电话是多少
lelee007 发表于 2007-12-19 21:02 | 显示全部楼层

BIOS_LOAD

都大写,估计是预定义的<br />嘿嘿,瞎猜,没看过龚俊的代码
王紫豪 发表于 2007-12-19 22:53 | 显示全部楼层

有啥考人的?自己不统一风格的代码看都不看!

  
qq26358275 发表于 2007-12-20 20:59 | 显示全部楼层

re

*(unsigned&nbsp;int&nbsp;*)(DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4)&nbsp;=&nbsp;bios_load_addr<br /><br />这样写你就明白了<br />unsigned&nbsp;int*&nbsp;p;<br />p&nbsp;=&nbsp;DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4;<br />*p&nbsp;=&nbsp;bios_load_addr;<br />其实就是把值为DFT_DOWNLOAD_ADDR+size+SECTOR_SIZE-4的地址赋值为bios_load_addr
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

119

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部