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