我研究了陷阱指令,但对我来说它没有什么意义,并且看起来与throws exception
Java 或类似的类似,它是相似的还是有什么作用?它只是说TRAP
指令总是会产生异常,我为什么要这样做?没有足够的信息让我理解为什么以及在哪里使用TRAP
.
2 回答
我研究了TRAP在PDP-11中是如何工作的,想和大家分享一下:
陷阱可以帮助你
- 将当前寄存器(包括PC/PS)存入堆栈,更新SP(堆栈指针)
- 将 PC(下一个仪器地址)设置为 TRAP 处理程序
- 将 PS(状态寄存器)设置为 TRAP 状态
You may refer to this image, https://github-camo.global.ssl.fastly.net/3e636f86530380760fcc784c3178d40723d55a44/687474703a2f2f696b6172697368696e6a696576612e6769746875622e696f2f756e697856362d636f64652d616e616c797a652d6368732f696d616765732f50647031315f696e737472756374696f6e5f545241502e706e67 (Sorry that I need 10 reputation to upload image...)(The chinese character in the image means "Stack ")
TRAP 是提供处理器级别的上下文切换保护,这意味着 TRAP 可以保存寄存器,安全地从其他代码地址切换到运行,并且可以因为旧的 PC/PS 保存在堆栈中而切换回来。这就像一个函数调用,但也不例外。
在UnixV6中,TRAP主要用于处理hardward-interval,如clock-interval(KW11-L)、power-fail-interval等...
我不确定它是否有助于解决您在 FPGA 中的问题,如果不是,请忽略我...
谢谢。
要理解这一点,您必须了解硬件和软件中断之间的差异。
硬件中断:为了处理 IO 和硬件定时器等异步事件,CPU 使用中断。硬件中断使 CPU 停止其当前执行,保存状态(如寄存器等),并跳转到中断处理程序所在的预定义地址。当处理程序完成它的工作时,CPU 通过恢复保存的状态从它停止的地方恢复执行。
软件中断又名陷阱又名异常:CPU 支持允许软件模拟中断的特殊指令。当执行这样的指令时,CPU 将其视为硬件中断,即停止其正常的执行流程,保存其状态并跳转到处理程序例程。此类“陷阱”用于实现任务调度、虚拟内存、内存保护、调试等诸多功能......
希望这可以帮助。
忘记了问题的异常部分:一些编程错误(例如除以0)也被CPU视为陷阱,并且经常被称为“异常”。