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