求助:一个ARM启动程序的初级问题
请问CPSR, SP还有cpsr_cxsf等等现Rn一样,都是编译器认识的吗?因为我没见其它地方有定义过呀? 这些寄存器在使用时并不用事先声明,除此以外的特殊功能寄存器都要事先宏定义好。当然你可以直接对地址操作。 谢谢!还想再请教两个问题:
1. 如下程序段,问题在行后:
MACRO
$HandlerLabel HANDLER $HandleLable;$符号有什么用?
$HandlerLabel ;为什么要这个标号?
sub sp,sp,#4 ;
sub sp,sp,#4 ;
stmfd sp!,{r0} ;
ldr r0,=$HandleLabel ;
ldr r0, ;
str r0, ;
ldmfd sp!,{r0,pc} ;
MEND
另外,是否有这段以后,HandleLabel就是一个已经定义的宏了,是否就可以用了,因为初始化堆栈后面有这样一句:
ldr r0,=HandleIRQ ;HandleIRQ除了在以下语句中以外,其它地方都没有:
HandlerFIQ HANDLER HandleFIQ;这样的语句是怎样引用宏的?
HandlerIRQ HANDLER HandleIRQ;
2. |Image$$RO$$Limit|是编译器里规定好的呢?还是在哪里定义过的,但我没找到。
不好意思,问题有点多,归纳起来就一个问题,很多符号找不到定义它的地方,这可能是初学者都头痛的问题。还有就是那几个HandleXXX和HandlerXXX,头都晕了。期待回音,谢谢! MACRO、MEND
$标号宏名$参数1,$参数2,...
MEND
MACRO、MEND伪指令可以讲一段代码定义为一个整体,成为宏指令,其中,$标号在宏指令被展开时,标号会被替换为用户定义的符号,参数被相应的值替换。
我介绍你一本书,arm应用系统开发详解,李驹光编著的。这些上面都讲了。
还有,汇编语言并不要求你要会编,能看懂就好了,真正的大头儿开发使用c语言,汇编只是开始的bootloader要用,基本是这样,不要浪费太大精力在汇编上! 谢谢!我觉得你说得在理,我是在边用C,边仿真再边看bootloader,我个人认为那些个东西要真正能理解了后面的路才好走。也谢谢你推荐的书!
在此我也向像我一样初学者推荐一种方法,可以在仿真的过程中一条指令一条指令地看,对理解bootloader是很有作用的。 关于bootloader汇编指令的问题可以参考ADS带的手册ADS_AssemblerGuide_B.pdf
哪里汇编指令讲解的比较多 谢谢,我已下载了。在http://www.embed.com.cn/download/fy_upfile//ADS_CodeWarriorIDEGuide.rar可以下载,这个链接是相关下载页面。
页:
[1]