【发布时间】:2009-09-28 15:07:45
【问题描述】:
我正在编写一个汇编程序来处理 EABI 嵌入式 PowerPC 应用程序中的 0x500 外部/递减器异常。
在从 0x500 向量点调用的汇编程序例程中,我想在跳转到“C”中的处理函数之前使用一些内存来上下文保存寄存器。
因为 i) 异常模型保证前面的指令在异常处理程序运行时已经完成 和 ii)调用约定似乎首先在进入新函数时更新堆栈指针(r1),然后再使用通过移动它释放的新堆栈空间(并将堆栈指针移回函数末尾的最后一个位置)
在我看来,我可以安全地使用 r1 在异常处理例程中的普通堆栈上为自己留出更多空间,前提是我显然遵守调用约定并将堆栈放回我找到它的方式并确保 SRR0和 SRR1 未修改。
我不会允许在处理过程中使用堆栈的异常嵌套(尽管实际上使用这种方法我不确定是否会出现问题)。
您认为这是一种明智的做法,还是应该使用单独的堆栈来处理异常? - 我认为这可能会带来它自己的问题。
【问题讨论】:
标签: assembly exception-handling embedded powerpc