汇编指令如下(前面的数字是我后加的,用于标记语句):
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