【问题标题】:Creating your own TRAP exception handler?创建自己的 TRAP 异常处理程序?
【发布时间】:2016-11-22 00:53:24
【问题描述】:

我目前正在使用 M68000 学习汇编语言,但无法弄清楚如何使用 TRAP 5 到 13 指令。我似乎无法在网上找到任何关于某人创建自己的 TRAP 指令的示例。例如,您将如何编写一个简单的 TRAP#6 指令来切换处理器的状态。 (用户状态或主管状态)。

【问题讨论】:

  • 请发布您的示例代码,如果您有问题,请发布错误

标签: assembly exception-handling 68000 motorola-trap


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 如果您在裸机上工作,请确保您的主管堆栈已正确初始化。
猜你喜欢
  • 1970-01-01
  • 2023-03-07
  • 2011-04-29
  • 1970-01-01
  • 2013-01-30
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多