为什么我要使用TRAP指令?

时间:2013-07-16 00:24:28

标签: assembly nios

我研究陷阱指令,但对我而言,它在Java或类似的情况下与throws exception看起来有点不同,它是相似的还是它做什么?它只是说TRAP指令总是会产生异常,我为什么要这样做呢?我没有足够的信息来理解为什么以及在哪里使用TRAP

enter image description here

2 个答案:

答案 0 :(得分:2)

我研究了TRAP如何在PDP-11中工作,并希望与您分享:

陷阱可以帮助你

  1. 将寄存器(包括PC / PS)保存到堆栈中,更新SP(堆栈指针)
  2. 将PC(下一个仪器地址)设置为TRAP处理程序
  3. 将PS(状态寄存器)设置为TRAP状态
  4. 您可以参考此图片,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视为陷阱,并且经常被称为“异常”。