[ZLG-ARM] 启动代码的反汇编

[复制链接]
3512|5
 楼主| leonlais 发表于 2008-12-5 11:18 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;85:&nbsp;Vectors&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;加载Reset_Addr到寄存器PC中&nbsp;<br />0x00000000&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;这里是将PC+0x0018地址处的数据读出保存到PC,一开始PC=0,那么PC+0x0018后就是0x0018,就是说完成这语句后,程序要跳到0x0018该地址了,但是从LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr&nbsp;&nbsp;来看,是要跳到Reset_Addr该地址处(0x00000020&nbsp;&nbsp;00000058&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;0x00000058).那这样不是错了吗?&nbsp;<br />&nbsp;&nbsp;&nbsp;86:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Undef_Addr&nbsp;<br />0x00000004&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]<br />&nbsp;&nbsp;&nbsp;&nbsp;87:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;SWI_Addr&nbsp;<br />0x00000008&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]<br />&nbsp;&nbsp;&nbsp;&nbsp;88:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;PAbt_Addr&nbsp;<br />0x0000000C&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]<br />&nbsp;&nbsp;&nbsp;&nbsp;89:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;DAbt_Addr&nbsp;<br />0x00000010&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]<br />&nbsp;&nbsp;&nbsp;&nbsp;90:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Reserved&nbsp;Vector&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;91:&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;IRQ_Addr&nbsp;<br />0x00000014&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;92:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;[PC,&nbsp;#-0x0120]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Vector&nbsp;from&nbsp;VicVectAddr&nbsp;<br />0x00000018&nbsp;&nbsp;E51FF120&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#-0x0120]<br />&nbsp;&nbsp;&nbsp;&nbsp;93:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;FIQ_Addr&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;94:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;95:&nbsp;Reset_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reset_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;将Reset_Handler加载到当前地址Reset_Addr上&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;96:&nbsp;Undef_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undef_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;97:&nbsp;SWI_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWI_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;98:&nbsp;PAbt_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAbt_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;99:&nbsp;DAbt_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAbt_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;100:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xB9206E28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Reserved&nbsp;Address&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;101:&nbsp;IRQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;102:&nbsp;FIQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;103:&nbsp;&nbsp;<br />0x0000001C&nbsp;&nbsp;E59FF018&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#0x0018]<br />0x00000020&nbsp;&nbsp;00000058&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000058<br />0x00000024&nbsp;&nbsp;00000040&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000040<br />0x00000028&nbsp;&nbsp;00000044&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000044<br />0x0000002C&nbsp;&nbsp;00000048&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000048<br />0x00000030&nbsp;&nbsp;0000004C&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000004C<br />0x00000034&nbsp;&nbsp;B9206E28&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xB9206E28<br />0x00000038&nbsp;&nbsp;00000050&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000050<br />0x0000003C&nbsp;&nbsp;00000054&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000054<br />&nbsp;&nbsp;&nbsp;104:&nbsp;Undef_Handler&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undef_Handler&nbsp;<br />0x00000040&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000040<br />&nbsp;&nbsp;&nbsp;105:&nbsp;SWI_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWI_Handler&nbsp;<br />0x00000044&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000044<br />&nbsp;&nbsp;&nbsp;106:&nbsp;PAbt_Handler&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAbt_Handler&nbsp;<br />0x00000048&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000048<br />&nbsp;&nbsp;&nbsp;107:&nbsp;DAbt_Handler&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAbt_Handler&nbsp;<br />0x0000004C&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000004C<br />&nbsp;&nbsp;&nbsp;108:&nbsp;IRQ_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Handler&nbsp;<br />0x00000050&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000050<br />&nbsp;&nbsp;&nbsp;109:&nbsp;FIQ_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;110:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;111:&nbsp;;&nbsp;Reset&nbsp;Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;112:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;113:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;Reset_Handler&nbsp;<br />&nbsp;&nbsp;&nbsp;114:&nbsp;Reset_Handler&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;115:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;116:&nbsp;;&nbsp;Setup&nbsp;Stack&nbsp;for&nbsp;each&nbsp;mode&nbsp;<br />0x00000054&nbsp;&nbsp;EAFFFFFE&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000054<br />&nbsp;&nbsp;&nbsp;117:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=Stack_Top&nbsp;<br />&nbsp;&nbsp;&nbsp;118:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;119:&nbsp;;&nbsp;&nbsp;Enter&nbsp;Undefined&nbsp;Instruction&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x00000058&nbsp;&nbsp;E59F0050&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[PC,#0x0050]<br />&nbsp;&nbsp;&nbsp;120:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_UND:OR:I_Bit:OR:F_Bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;:OR:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mode_UND,I_Bit,F_Bit之间按位作逻辑或操作,设置未定义模式,禁止FIQ,IRQ&nbsp;<br />0x0000005C&nbsp;&nbsp;E321F0DB&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x000000DB<br />&nbsp;&nbsp;&nbsp;121:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;堆指针指向栈顶&nbsp;<br />0x00000060&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;122:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#UND_Stack_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;把减去&quot;未定义模式的栈&quot;大小后的地址存放在R0(那么从开始的栈顶到该地址之间的大小为未定义模式分配的栈的大小),R0只是一个存放东西的容器,它会随着存放内容同而更新自己的值&nbsp;<br />&nbsp;&nbsp;&nbsp;123:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;124:&nbsp;;&nbsp;&nbsp;Enter&nbsp;Abort&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x00000064&nbsp;&nbsp;E2400000&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00000000<br />&nbsp;&nbsp;&nbsp;125:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_ABT:OR:I_Bit:OR:F_Bit&nbsp;<br />0x00000068&nbsp;&nbsp;E321F0D7&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x000000D7<br />&nbsp;&nbsp;&nbsp;126:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;ABT模式的栈指针指向R0中存放的地址&nbsp;<br />0x0000006C&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;127:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#ABT_Stack_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;分配ABT模式的栈大小,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;128:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;129:&nbsp;;&nbsp;&nbsp;Enter&nbsp;FIQ&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x00000070&nbsp;&nbsp;E2400000&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00000000<br />&nbsp;&nbsp;&nbsp;130:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_FIQ:OR:I_Bit:OR:F_Bit&nbsp;<br />0x00000074&nbsp;&nbsp;E321F0D1&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x000000D1<br />&nbsp;&nbsp;&nbsp;131:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;<br />0x00000078&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;132:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#FIQ_Stack_Size&nbsp;<br />&nbsp;&nbsp;&nbsp;133:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;134:&nbsp;;&nbsp;&nbsp;Enter&nbsp;IRQ&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x0000007C&nbsp;&nbsp;E2400000&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00000000<br />&nbsp;&nbsp;&nbsp;135:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_IRQ:OR:I_Bit:OR:F_Bit&nbsp;<br />0x00000080&nbsp;&nbsp;E321F0D2&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x000000D2<br />&nbsp;&nbsp;&nbsp;136:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;<br />0x00000084&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;137:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#IRQ_Stack_Size&nbsp;<br />&nbsp;&nbsp;&nbsp;138:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;139:&nbsp;;&nbsp;&nbsp;Enter&nbsp;Supervisor&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x00000088&nbsp;&nbsp;E2400C01&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00000100<br />&nbsp;&nbsp;&nbsp;140:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_SVC:OR:I_Bit:OR:F_Bit&nbsp;<br />0x0000008C&nbsp;&nbsp;E321F0D3&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x000000D3<br />&nbsp;&nbsp;&nbsp;141:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;<br />0x00000090&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;142:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#SVC_Stack_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;分配管理模式堆栈的大小,R0现在存储着该堆栈的最底下地址(栈底)&nbsp;<br />&nbsp;&nbsp;&nbsp;143:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;144:&nbsp;;&nbsp;&nbsp;Enter&nbsp;User&nbsp;Mode&nbsp;and&nbsp;set&nbsp;its&nbsp;Stack&nbsp;Pointer&nbsp;<br />0x00000094&nbsp;&nbsp;E2400C01&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00000100<br />&nbsp;&nbsp;&nbsp;145:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_USR&nbsp;<br />0x00000098&nbsp;&nbsp;E321F010&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,#0x00000010<br />&nbsp;&nbsp;&nbsp;146:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0&nbsp;<br />0x0000009C&nbsp;&nbsp;E1A0D000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,R0<br />&nbsp;&nbsp;&nbsp;147:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SL,&nbsp;SP,&nbsp;#USR_Stack_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;到这里,所有模式的堆栈已经分配好,SL存储着用户模式堆栈的最底下地址(栈底)&nbsp;<br />&nbsp;
gooofy 发表于 2008-12-5 12:17 | 显示全部楼层

反汇编

这里是将PC+0x0018地址处的数据读出保存到PC,一开始PC=0,那么PC+0x0018后就是0x0018,就是说完成这语句后,程序要跳到0x0018该地址了,但是从LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr&nbsp;&nbsp;来看,是要跳到Reset_Addr该地址处(0x00000020&nbsp;&nbsp;00000058&nbsp;&nbsp;DD&nbsp;&nbsp;&nbsp;0x00000058).那这样不是错了吗?&nbsp;<br /><br /><br />//--------------------------------------<br />&quot;这里是将PC+0x0018地址处的数据读出保存到PC&quot;<br />其实这个地址(PC+0x0018)存放的数据就是Reset_Handler的地址<br />pc直接跳到Reset_Handler运行
 楼主| leonlais 发表于 2008-12-5 12:43 | 显示全部楼层

RE

其实这个地址(PC+0x0018)存放的数据就是Reset_Handler的地址<br />不是吧?<br />0x00000018&nbsp;&nbsp;E51FF120&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,[PC,#-0x0120]<br />存放的应该是VicVectAddr&nbsp;&nbsp;吧?<br /><br />请高手赐教
gooofy 发表于 2008-12-5 13:31 | 显示全部楼层

pc

因为arm7的三级流水线,在执行<br />LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr<br />的时候pc=8<br />执行过程就是将0x00000020地址的内容保存给pc<br />这个地址的内容是0x00000058<br />执行完成pc=0x00000058<br /><br />
 楼主| leonlais 发表于 2008-12-5 14:10 | 显示全部楼层

RE

呵呵&nbsp;&nbsp;&nbsp;原来执行的时候PC变成8了&nbsp;&nbsp;多谢gooofy的指教
bluergreen 发表于 2008-12-13 10:23 | 显示全部楼层

gooofy 说得很对,我之前一开始也是理解错了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

26

帖子

0

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