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