我刚刚学ARM,在看了 周立功 的smartARM2200的开发板以及所带的一些书籍后 才感到以上的疑问。<br /><br />能不能请周工给我详细的解答<br />1.<br />在初时化堆栈时候 要保存PC值<br />如下代码:<br />……………………………………………………<br />InitStack <br /> MOV R0, LR<br />;Build the SVC stack<br />;设置管理模式堆栈<br /> MSR CPSR_c, #0xd3<br /> LDR SP, StackSvc<br />;Build the IRQ stack <br />;设置中断模式堆栈<br /> MSR CPSR_c, #0xd2<br /> LDR SP, StackIrq<br />;Build the FIQ stack<br />;设置快速中断模式堆栈<br /> MSR CPSR_c, #0xd1<br /> LDR SP, StackFiq<br />;Build the DATAABORT stack<br />;设置中止模式堆栈<br /> MSR CPSR_c, #0xd7<br /> LDR SP, StackAbt<br />;Build the UDF stack<br />;设置未定义模式堆栈<br /> MSR CPSR_c, #0xdb<br /> LDR SP, StackUnd<br />;Build the SYS stack<br />;设置系统模式堆栈<br /> MSR CPSR_c, #0x5f<br /> LDR SP, =StackUsr<br /> MOV PC, R0<br />………………………………………………………………<br />如果不保存返回的PC 会有什么后果呢<br />只不过 在初时化堆栈时候 改变了模式吗<br />如果对程序计数器PC没的话何必用<br />MOV R0, LR<br />MOV PC, R0<br /><br />2.<br />程序如下:<br />………………………………………………<br />Reset<br /> LDR PC, ResetAddr<br /> LDR PC, UndefinedAddr<br /> LDR PC, SWI_Addr<br /> LDR PC, PrefetchAddr<br /> LDR PC, DataAbortAddr<br /> DCD 0xb9205f80<br /> LDR PC, [PC, #-0xff0]<br /> LDR PC, FIQ_Addr<br />………………………………………………<br />问:<br />这里的“LDR PC, [PC, #-0xff0]”<br />能否用“LDR PC, [0xfffff030]”<br />0x00000020-0xff0--->0xfffff030<br />
|