我研究陷阱指令,但对我而言,它在Java或类似的情况下与throws exception
看起来有点不同,它是相似的还是它做什么?它只是说TRAP
指令总是会产生异常,我为什么要这样做呢?我没有足够的信息来理解为什么以及在哪里使用TRAP
。
答案 0 :(得分:2)
我研究了TRAP如何在PDP-11中工作,并希望与您分享:
陷阱可以帮助你
您可以参考此图片,https://github-camo.global.ssl.fastly.net/3e636f86530380760fcc784c3178d40723d55a44/687474703a2f2f696b6172697368696e6a696576612e6769746875622e696f2f756e697856362d636f64652d616e616c797a652d6368732f696d616765732f50647031315f696e737472756374696f6e5f545241502e706e67(很抱歉我上传图片需要10点声望...)(图片中的中文字符表示“堆叠”)
TRAP是提供处理器级上下文切换保护,这意味着TRAP可以保存寄存器,安全地切换到从其他代码地址运行,并且可以切换回来,因为旧的PC / PS保存在堆栈中。它就像一个函数调用,但不是例外。
在UnixV6中,TRAP主要用于处理硬件间隔,如时钟间隔(KW11-L),电源故障间隔等......
我不确定它是否可以帮助您解决FPGA中的问题,如果不是,请忽略我......
感谢。
答案 1 :(得分:1)
要理解这一点,您必须了解硬件和软件中断之间的区别。
硬件中断: 要处理IO和硬件定时器等异步事件,CPU会使用中断。硬件中断使CPU停止当前执行,保存状态(如寄存器等),并跳转到中断处理程序所在的预定义地址。当处理程序完成其工作时,CPU将通过恢复已保存的状态从其停止的位置恢复执行。
软件中断又名陷阱又称例外: CPU支持允许软件模拟中断的特殊指令。当执行这样的指令时,CPU将其视为硬件中断,即停止其正常的执行流程,保存其状态并跳转到处理程序例程。这种“陷阱”用于实现许多功能,如任务调度,虚拟内存,内存保护,调试......
希望这有帮助。
忘记问题的异常部分:一些编程错误(例如除以0)也被CPU视为陷阱,并且经常被称为“异常”。