首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

哪位高手能解释下下面的代码是怎么运行的(WINCE)

2012-03-01 
谁能解释下下面的代码是如何运行的(WINCE)?WINCE 中断处理,在kernelStart的过程中通过程序将如下代码复制

谁能解释下下面的代码是如何运行的(WINCE)?
WINCE 中断处理,在kernelStart的过程中通过程序将如下代码复制到ffff0000的位置. 
VectorInstructions 
  ldr pc, [pc, #0x3E0-8] ; reset 
  ldr pc, [pc, #0x3E0-8] ; undefined instruction 
  ldr pc, [pc, #0x3E0-8] ; SVC 
  ldr pc, [pc, #0x3E0-8] ; Prefetch abort 
  ldr pc, [pc, #0x3E0-8] ; data abort 
  ldr pc, [pc, #0x3E0-8] ; unused vector location 
  ldr pc, [pc, #0x3E0-8] ; IRQ 
  ldr pc, [pc, #0x3E0-8] ; FIQ 


VectorTable 
  DCD -1 ; reset 
  DCD UndefException ; undefined instruction 
  DCD SWIHandler ; SVC 
  DCD PrefetchAbort ; Prefetch abort 

  IF :DEF:ARMV4T :LOR: :DEF:ARMV4I 
  DCD OEMDataAbortHandler ; data abort 
  ELSE 
  DCD DataAbortHandler ; data abort 
  ENDIF 

  DCD -1 ; unused vector 
  DCD IRQHandler ; IRQ 
  DCD FIQHandler ; FIQ 

1。这个VectorTable 怎么知道是放在0x3e0地址中的。
2。ldr pc, [pc, #0x3E0-8] 如何理解这条指令。
3。是如何复制到0xffff0000地址上的。

[解决办法]
我觉得
1,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。所以ldr pc, [pc, #0x3E0-8]的意思是pc加上#0x3E0处存放着一个地址值,程序跳转到这个地址值。
2,VectorTable 为VectorInstructions + 0x3e0,“ldr pc, [pc, #0x3E0-8]”指令里偏移为0x3E0,正好对应。
3,如何复制到0xffff0000地址上。知道了内核存放8条“ldr pc, [pc, #0x3E0-8]”指令的地址(源地址),又知道VectorInstructions的地址0xffff0000(目标地址),那么复制就行了。
[解决办法]
http://blog.csdn.net/ymzhou117/archive/2010/04/24/5525028.aspx

热点排行