以下代码片断摘自IAR EWARM中某项目的cstartup.s79文件:<br />;********************************************************************************************************<br />; ARM EXCEPTION VECTORS<br />;********************************************************************************************************<br /><br /> MODULE ?RESET<br /> COMMON INTVEC:CODE:NOROOT(2)<br /> PUBLIC __program_start<br /> EXTERN ?cstartup<br /><br /> IMPORT OS_CPU_ARM_ExceptUndefInstrHndlr<br /> IMPORT OS_CPU_ARM_ExceptSwiHndlr<br /> IMPORT OS_CPU_ARM_ExceptPrefetchAbortHndlr<br /> IMPORT OS_CPU_ARM_ExceptDataAbortHndlr<br /> IMPORT OS_CPU_ARM_ExceptIrqHndlr<br /> IMPORT OS_CPU_ARM_ExceptFiqHndlr<br /><br /> CODE32<br /><br /> ORG 0x00<br />__program_start:<br /> LDR PC, [PC,#24] ; Absolute jump can reach 4 GByte<br /> ORG 0x04<br /> LDR PC, [PC,#24] ; Branch to undef_handler<br /> ORG 0x08<br /> LDR PC, [PC,#24] ; Branch to swi_handler<br /> ORG 0x0C<br /> LDR PC, [PC,#24] ; Branch to prefetch_handler<br /> ORG 0x10<br /> LDR PC, [PC,#24] ; Branch to data_handler<br /> ORG 0x18<br /> LDR PC, [PC,#24] ; Branch to irq_handler<br /> ORG 0x1C<br /> LDR PC, [PC,#24] ; Branch to fiq_handler<br /><br /><br /> ORG 0x20<br /> DC32 ?cstartup<br /> ORG 0x24<br /> DC32 OS_CPU_ARM_ExceptUndefInstrHndlr<br /> ORG 0x28<br /> DC32 OS_CPU_ARM_ExceptSwiHndlr<br /> ORG 0x2C<br /> DC32 OS_CPU_ARM_ExceptPrefetchAbortHndlr<br /> ORG 0x30<br /> DC32 OS_CPU_ARM_ExceptDataAbortHndlr<br /> ORG 0x38<br /> DC32 OS_CPU_ARM_ExceptIrqHndlr<br /> ORG 0x3C<br /> DC32 OS_CPU_ARM_ExceptFiqHndlr<br /><br /> ENDMOD<br /><br />指令“LDR PC, [PC,#24]”中的常数24是如何计算得来? |
|