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