2016-11-22 62 views
1

我目前在学习使用M68000的汇编语言,并且无法确定如何使用TRAP 5至13指令。我似乎无法在网上找到有人创建自己的TRAP说明。例如,如何编写一个简单的TRAP#6指令来切换处理器的状态。 (用户状态或主管状态)。创建您自己的TRAP异常处理程序?

+0

请张贴您的示例代码,错误如果您有问题 – Sachith

回答

3

编写陷阱处理程序并不是微不足道的,尤其是切换特权模式是毛茸茸的(因为它不仅改变了特权模式,而且还在CPU具有的两个或三个堆栈指针之间切换:USP/MSP/ISP)。

下一个障碍是,每个68K家庭成员都使用自己的堆栈框架,这意味着推入SSP的内容因实际CPU型号而异(68000是“最差”的违规者,因为原始堆栈帧不具有标识字段,不同于具有通用帧格式指示字的较高型号)。 堆栈帧格式记录在M68K Familiy手册中,您可以在网上找到它。

第三个问题是实际安装处理程序。您必须在存储器中找到陷阱向量,除68000以外的所有68K CPU通过VBR寄存器可以将其重定位到任意地址。更不用说你不能在用户模式下访问VBR了。第四,陷阱向量几乎总是在操作系统控制之下,所以改变陷阱向量可能会破坏系统。用户陷阱向量可能会或可能不会通过操作系统特定手段得到支持

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

+0

如果您正在使用裸机,请确保您的主管堆栈已正确初始化。 – tofro