我正在尝试保存寄存器的上下文并将堆栈指针存储到 Assembly 中的 C 变量,它可以工作,但是当它到达 return 语句时会引发许多错误和崩溃。
这是代码:
_saveContext:
PUSH SR
PUSH W0
MOV #32, W0
MOV W0, SR
PUSH W1
PUSH.D W2
PUSH.D W4
PUSH.D W6
PUSH.D W8
PUSH.D W10
PUSH.D W12
PUSH W14
PUSH RCOUNT
PUSH TBLPAG
PUSH ACCAL
PUSH ACCAH
PUSH ACCAU
PUSH ACCBL
PUSH ACCBH
PUSH ACCBU
PUSH DCOUNT
PUSH DOSTARTL
PUSH DOSTARTH
PUSH DOENDL
PUSH DOENDH
PUSH CORCON
PUSH PSVPAG
MOV W15, W0
MOV W0, _stackPointer //Save to C Var
RETURN
在 MPLAB 中模拟代码时,它可以工作,C 变量被分配堆栈指针的值,但是当它到达 RETURN 时会导致多个错误:
“CORE-E0004:由于未实现的 FLASH 存储器访问而导致的陷阱,从 0xXXXXXX 处的指令发生”错误
我认为这可能与我访问堆栈指针(W15)的方式有关。
有人有什么建议吗?谢谢