当前位置: 代码迷 >> 汇编语言 >> ldr指令的困惑(菜鸟)
  详细解决方案

ldr指令的困惑(菜鸟)

热度:10102   发布时间:2013-02-26 00:00:00.0
ldr指令的困惑(初学者)
汇编指令如下(前面的数字是我后加的,用于标记语句):
1 b reset
2 ldr pc, isr_undef_addr
3 ldr pc, isr_software_addr
4 ldr pc, isr_prefetch_addr
5 ldr pc, isr_data_addr
6 nop
7 ldr pc, isr_irq_addr
8 ldr pc, isr_fiq_addr

通过仿真器查看,上述语句在内存中的形式为:

语句 SRAM地址 ARM指令码 对应的ARM语句
-------------------------------------------------------
 1 0x40200018: EA000006 b reset
 2 0x4020001C: E59FF058 ldr pc, isr_undef_addr
 3 0x40200020: E59FF058 ldr pc, isr_software_addr
 4 0x40200024: E59FF058 ldr pc, isr_prefetch_addr
 5 0x40200028: E59FF058 ldr pc, isr_data_addr
 6 0x4020002C: E1A00000 mov r0, r0
 7 0x40200030: E59FF054 ldr pc, isr_irq_addr
 8 0x40200034: E59FF054 ldr pc, isr_fiq_addr

请问,为什么第2、3、4、5条语句的ARM指令码是一样的?第7、8条语句的ARM指令码是一样的?明明它们的ARM语句是不一样的啊!

------解决方案--------------------------------------------------------
找下arm instruction set翻翻就是了,ldr的d11~d0表示offset,既然offset都一样,这些标号表示在sram中的一片连续地址,从低到高依次为:
isr_undef_addr
isr_software_addr
isr_prefetch_addr
isr_data_addr
isr_irq_addr
isr_fiq_addr
------解决方案--------------------------------------------------------
你这是要问重定位?根据PC来算的
这些地址
isr_undef_addr
isr_software_addr
isr_prefetch_addr
isr_data_addr
isr_irq_addr
isr_fiq_addr
也就是跳转表而已
------解决方案--------------------------------------------------------
你是要问PIC怎么做position independent code
  相关解决方案