Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 我为什么要使用陷阱指令?_Assembly_Nios - Fatal编程技术网

Assembly 我为什么要使用陷阱指令?

Assembly 我为什么要使用陷阱指令?,assembly,nios,Assembly,Nios,我研究了trap指令,但对我来说,它没有什么意义,看起来与Java或likewse中的抛出异常类似,它是类似的还是做了什么?它只是说TRAP指令总是生成异常,我为什么要这样做?没有足够的信息让我理解为什么要使用TRAP 我研究了陷阱在PDP-11中的工作原理,希望与大家分享: 陷阱可以帮你解决问题 将当前寄存器(包括PC/PS)保存到堆栈中,更新SP(堆栈指针) 将PC(下一个仪器地址)设置为陷阱处理器 将PS(状态寄存器)设置为陷阱状态 你可以参考这张图片,(很抱歉,我需要10个声誉来上传图片

我研究了trap指令,但对我来说,它没有什么意义,看起来与Java或likewse中的
抛出异常类似,它是类似的还是做了什么?它只是说
TRAP
指令总是生成异常,我为什么要这样做?没有足够的信息让我理解为什么要使用
TRAP


我研究了陷阱在PDP-11中的工作原理,希望与大家分享:

陷阱可以帮你解决问题

  • 将当前寄存器(包括PC/PS)保存到堆栈中,更新SP(堆栈指针)
  • 将PC(下一个仪器地址)设置为陷阱处理器
  • 将PS(状态寄存器)设置为陷阱状态
  • 你可以参考这张图片,(很抱歉,我需要10个声誉来上传图片…(图片中的汉字表示“堆栈”)

    TRAP提供处理器级上下文切换保护,这意味着TRAP可以保存寄存器,安全地从其他代码地址切换到运行,并且可以切换回,因为旧PC/PS保存在堆栈中。它就像一个函数调用,但不是异常

    在UnixV6中,陷阱主要用于处理硬间隔,如时钟间隔(KW11-L)、电源故障间隔等

    我不确定它是否能帮助你解决FPGA方面的问题,如果不是的话,请不要理我


    谢谢。

    要理解这一点,您必须了解硬件中断和软件中断之间的区别

    硬件中断: 为了处理IO和硬件定时器等异步事件,CPU使用中断。硬件中断使CPU停止当前执行、保存状态(如寄存器等),并跳转到中断处理程序例程所在的预定义地址。当处理程序完成其工作时,CPU通过恢复保存的状态从停止的位置恢复执行

    软件中断或异常: CPU支持允许软件模拟中断的特殊指令。当执行此类指令时,CPU将其视为硬件中断,即停止其正常执行流,保存其状态并跳转到处理程序例程。此类“陷阱”用于实现许多功能,如任务调度、虚拟内存、内存保护、调试

    希望这有帮助


    忘记了问题的异常部分:一些编程错误(例如被0除法)也被CPU视为陷阱,并且经常被称为“异常”。

    您不必显式地使用一个。它们通常用于特殊目的:我不确定这是否是一个与FPGA相关的问题,这是一个软件问题,我认为您应该从中删除FPGA标志。