Assembly 创建自己的陷阱异常处理程序?

Assembly 创建自己的陷阱异常处理程序?,assembly,exception-handling,68000,motorola-trap,Assembly,Exception Handling,68000,Motorola Trap,我目前正在学习使用M68000的汇编语言,并且很难理解如何使用陷阱5到13指令。我似乎在网上找不到任何关于某人创建自己的陷阱说明的例子。例如,如何编写一条简单的TRAP#6指令来切换处理器的状态。(用户状态或管理者状态)。编写陷阱处理程序不是一件小事,尤其是切换特权模式非常麻烦(因为它不仅会更改特权模式,还会在CPU具有的两个或三个堆栈指针之间切换:USP/MSP/ISP) 下一个障碍是每个68K系列成员都使用自己的堆栈帧集,这意味着推送到SSP上的内容根据实际的CPU型号而不同(68000是“

我目前正在学习使用M68000的汇编语言,并且很难理解如何使用陷阱5到13指令。我似乎在网上找不到任何关于某人创建自己的陷阱说明的例子。例如,如何编写一条简单的TRAP#6指令来切换处理器的状态。(用户状态或管理者状态)。

编写陷阱处理程序不是一件小事,尤其是切换特权模式非常麻烦(因为它不仅会更改特权模式,还会在CPU具有的两个或三个堆栈指针之间切换:USP/MSP/ISP)

下一个障碍是每个68K系列成员都使用自己的堆栈帧集,这意味着推送到SSP上的内容根据实际的CPU型号而不同(68000是“最坏”的违规者,因为原始堆栈帧集没有标识字段,不同于具有公共帧格式指示符字的更高型号)。 堆栈帧格式记录在M68K Family手册中,您可以在线找到该手册

第三个问题是实际安装处理程序。您必须找到内存中陷阱的向量,该向量可以通过VBR寄存器重新定位到除68000之外的所有68K CPU中的任何地址。更不用说你不能在用户模式下访问VBR了

第四,陷阱向量几乎总是在操作系统的控制下,因此更改陷阱向量可能会破坏系统。用户陷阱向量可以通过操作系统特定的方式支持,也可以不支持


对于68000的工作演示,您可以从家庭手册中查找矢量编号和堆栈帧格式,并将该矢量指向您自己的代码。我建议从一些简单的事情开始,比如只更改陷阱处理程序中的寄存器值,然后在尝试特权更改等特技之前确认它是否有效。

请发布您的示例代码,如果您在裸机上工作时遇到问题,请发出错误,确保您的管理器堆栈已正确初始化。