我按照网上一个教程写简单的跳转到c入口的启动文件, AREA INIT,CODE,READONLY CODE32
ARM_MODE_USER EQU 0x10 ARM_MODE_FIQ EQU 0x11 ARM_MODE_IRQ EQU 0x12 ARM_MODE_SVC EQU 0x13 ARM_MODE_ABORT EQU 0x17 ARM_MODE_UNDEF EQU 0x1B ARM_MODE_SYS EQU 0x1F
I_BIT EQU 0x80 F_BIT EQU 0x40 T_BIT EQU 0x20
USR_Stack EQU 0x00203000
ENTRY B InitReset ; 0x00 Reset handler undefvec B undefvec ; 0x04 Undefined swivec B swivec ; 0x08 Software Interrupt pabtvec B pabtvec ; 0x0C Prefetch Abort dabtvec B dabtvec ; 0x10 Data Abort rsvdvec B rsvdvec ; 0x14 reserved irqvec B irqvec ; 0x18 IRQ fiqvec B fiqvec ; 0x1c FIQ
InitReset
MSR CPSR_c,#ARM_MODE_SVC| I_BIT | F_BIT ;改成用户模式且禁止IRQ和FIQ中断 LDR SP,=USR_Stack ;这一块跳到c入口,我有很多疑问 ;跳到c的代码我在下面给出
stop B stop
END
跳到c代码 我在网上看的都是 IMPORT main B main 我试了一下,确实能进入c的main,但是执行完成返回到汇编后,最终停在一条swi语句,很纳闷 而且在axd中根本看不到自己的源码,反汇编代码也很怪异
只有这样写才可以 EXPORT __main __main IMPORT main B main 为什么加了这么一个标示就好了
|