我目前正在使用 M68000 学习汇编语言,但无法弄清楚如何使用 TRAP 5 到 13 指令。我似乎无法在网上找到任何关于某人创建自己的 TRAP 指令的示例。例如,您将如何编写一个简单的 TRAP#6 指令来切换处理器的状态。(用户状态或主管状态)。
问问题
585 次
1 回答
3
编写陷阱处理程序并非易事,尤其是切换特权模式很麻烦(因为它不仅会更改特权模式,还会在 CPU 拥有的两个或三个堆栈指针之间切换:USP/MSP/ISP)。
下一个障碍是每个 68K 系列成员都使用自己的堆栈帧集,这意味着推送到 SSP 上的内容因实际 CPU 型号而异(68000 是“最严重的”违规者,因为原始堆栈帧集没有标识字段,与具有通用帧格式指示字的高级模型不同)。堆栈帧格式记录在 M68K 系列手册中,您可以在网上找到该手册。
第三个问题是实际安装您的处理程序。您必须在内存中定位陷阱的向量,该向量可以通过 VBR 寄存器重新定位到除 68000 之外的所有 68K CPU 中的任何地址。更不用说您无法在用户模式下访问 VBR。
第四,陷阱向量几乎总是受操作系统控制,因此更改陷阱向量可能会破坏系统。用户陷阱向量可能会或可能不会通过操作系统特定的方式得到支持。
对于 68000 的工作演示,您可以从家庭手册中查找向量编号和堆栈帧格式,然后将该向量指向您自己的代码。我建议从一些非常简单的事情开始,例如在陷阱处理程序中更改寄存器值,然后在尝试特权更改之类的特技之前确认它是否有效。
于 2016-11-24T16:59:30.703 回答