zgfszyx 发表于 2006-3-23 14:09:58

求助:一个ARM启动程序的初级问题

请问CPSR, SP还有cpsr_cxsf等等现Rn一样,都是编译器认识的吗?因为我没见其它地方有定义过呀?

neo1919 发表于 2006-3-24 09:08:51

这些寄存器在使用时并不用事先声明,除此以外的特殊功能寄存器都要事先宏定义好。当然你可以直接对地址操作。

zgfszyx 发表于 2006-3-24 11:47:31

谢谢!
还想再请教两个问题:
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,头都晕了。期待回音,谢谢!

neo1919 发表于 2006-3-24 18:46:53

MACRO、MEND
$标号宏名$参数1,$参数2,...
MEND
MACRO、MEND伪指令可以讲一段代码定义为一个整体,成为宏指令,其中,$标号在宏指令被展开时,标号会被替换为用户定义的符号,参数被相应的值替换。
我介绍你一本书,arm应用系统开发详解,李驹光编著的。这些上面都讲了。
还有,汇编语言并不要求你要会编,能看懂就好了,真正的大头儿开发使用c语言,汇编只是开始的bootloader要用,基本是这样,不要浪费太大精力在汇编上!

zgfszyx 发表于 2006-3-24 20:39:06

谢谢!我觉得你说得在理,我是在边用C,边仿真再边看bootloader,我个人认为那些个东西要真正能理解了后面的路才好走。也谢谢你推荐的书!
在此我也向像我一样初学者推荐一种方法,可以在仿真的过程中一条指令一条指令地看,对理解bootloader是很有作用的。

lumit-support-1 发表于 2006-3-25 00:02:48

关于bootloader汇编指令的问题可以参考ADS带的手册ADS_AssemblerGuide_B.pdf
哪里汇编指令讲解的比较多

zgfszyx 发表于 2006-3-28 10:03:55

谢谢,我已下载了。在http://www.embed.com.cn/download/fy_upfile//ADS_CodeWarriorIDEGuide.rar可以下载,这个链接是相关下载页面。
页: [1]
查看完整版本: 求助:一个ARM启动程序的初级问题