computer00: 你在昨夜对我问题的再次回复我真的很感动: “UsrStackSpace是一个标号,它里面的内容是UsrStack的地址(这个地址在RAM中).
而StackUsr DCD UsrStackSpace,则是将UsrStackSpace这个标号的地址(这个地址在ROM中)放在了StackUsr里面,所以两者不一样了。
通过StackUsr里面的值,可以找到UsrStackSpace的地址,这个地址里面的内容才是堆栈.
而你前面正确的,StackUsr里面的值就是堆栈.”
你的分析应该是正确的,我对“disassemble”出来的东东一知半解。
现在是否说明 书上所给的初如化堆栈的方法有问题,因为正如你所分析的不能指向RAM地址: =========================================================================== StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1)*4 StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)*4 StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)*4 StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)*4 StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)*4 StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)*4
; 分配堆栈空间 AREA MyStacks, DATA, NOINIT, ALIGN=2 UsrStackSpace SPACE USR_STACK_LEGTH * 4 ; 用户(系统)模式堆栈空间 SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ; 管理模式堆栈空间 IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ; 中断模式堆栈空间 FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ; 快速中断模式堆栈空间 AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ; 中止义模式堆栈空间 UndtStackSpace SPACE UND_STACK_LEGTH * 4 ; 未定义模式堆栈 ============================================================================ 因为要实现堆栈向下递减,所以只能像书上所讲的方法,我该怎么办呢? |