我目前在学习使用M68000的汇编语言,并且无法确定如何使用TRAP 5至13指令。我似乎无法在网上找到有人创建自己的TRAP说明。例如,如何编写一个简单的TRAP#6指令来切换处理器的状态。 (用户状态或主管状态)。创建您自己的TRAP异常处理程序?
1
A
回答
3
编写陷阱处理程序并不是微不足道的,尤其是切换特权模式是毛茸茸的(因为它不仅改变了特权模式,而且还在CPU具有的两个或三个堆栈指针之间切换:USP/MSP/ISP)。
下一个障碍是,每个68K家庭成员都使用自己的堆栈框架,这意味着推入SSP的内容因实际CPU型号而异(68000是“最差”的违规者,因为原始堆栈帧不具有标识字段,不同于具有通用帧格式指示字的较高型号)。 堆栈帧格式记录在M68K Familiy手册中,您可以在网上找到它。
第三个问题是实际安装处理程序。您必须在存储器中找到陷阱向量,除68000以外的所有68K CPU通过VBR寄存器可以将其重定位到任意地址。更不用说你不能在用户模式下访问VBR了。第四,陷阱向量几乎总是在操作系统控制之下,所以改变陷阱向量可能会破坏系统。用户陷阱向量可能会或可能不会通过操作系统特定手段得到支持
对于的工作演示只需 68000,您可以从家庭手册中查找矢量编号和堆栈帧格式,并将该矢量指向您自己的代码。我建议从一些简单的事情开始,例如只更改陷阱处理程序中的寄存器值,然后在尝试特权更改等特技之前确认它是否有效。
+0
如果您正在使用裸机,请确保您的主管堆栈已正确初始化。 – tofro
相关问题
- 1. 创建自己的wurfl异常
- 2. 在全局异常处理程序中处理线程异常?
- 3. 异常处理程序
- 4. php:在异常处理程序中处理异常?
- 5. 如何在DLL中创建全局异常处理程序?
- 6. 如何为WCF服务创建全局异常处理程序?
- 7. 创建您自己的ADDED_TO_STAGE事件
- 8. 创建您自己的系统颜色
- 9. 何时创建您自己的IEnumerable类
- 10. 创建您自己的Keras优化器
- 11. 创建您自己的语言
- 12. magento:创建您自己的收藏
- 13. Android创建您自己的菜单
- 14. 程序流程处理时异常PLSQL
- 15. 默认的.NET异常处理程序
- 16. 在Linux上的异常处理程序
- 17. WPF应用程序的异常处理
- 18. NullPointerException异常处理程序的Android
- 19. 范围引发异常,处理自己的异常在PLSQL代码
- 20. 在异常处理程序内部创建的Linux内核线程停止
- 21. 在Xamarin.Android中运行程序导致创建按钮处理程序中出现未处理的异常
- 22. 如何处理自己方法中的异常
- 23. 春天异常处理程序不处理某些类型的异常
- 24. 自动化异常处理
- 25. 自定义异常处理
- 26. 异常打滑的异常处理程序
- 27. 添加用户定义的异常和异常处理程序
- 28. 寻找c#异常处理程序
- 29. Laravel 5跳过异常处理程序
- 30. “全局”异常处理程序
请张贴您的示例代码,错误如果您有问题 – Sachith