Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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_Interrupt_Computer Architecture_Interrupt Handling - Fatal编程技术网

Assembly 矢量中断

Assembly 矢量中断,assembly,interrupt,computer-architecture,interrupt-handling,Assembly,Interrupt,Computer Architecture,Interrupt Handling,矢量化中断和非矢量化中断之间的区别是什么 我以为所有的中断都是矢量化的中断。。。毕竟,不是所有的中断都有一个向量号,从而有一个特定ISR的向量[中断服务程序] (ISR地址将在页表中,在4*产生中断的设备中的向量;假设为32位地址体系结构) 谢谢 见: 向量化中断:设备告诉CPU它需要注意,通过中断识别自己 轮询中断:CPU必须轮询多个设备以查看哪个设备请求了注意 每当中断发生时,CPU都需要执行一个处理程序,它基本上是一个处理中断的子程序。现在CPU如何访问这个处理器取决于中断的类型 在向量

矢量化中断和非矢量化中断之间的区别是什么

我以为所有的中断都是矢量化的中断。。。毕竟,不是所有的中断都有一个向量号,从而有一个特定ISR的向量[中断服务程序]

(ISR地址将在页表中,在4*产生中断的设备中的向量;假设为32位地址体系结构)

谢谢

见:

  • 向量化中断:设备告诉CPU它需要注意,通过中断识别自己
  • 轮询中断:CPU必须轮询多个设备以查看哪个设备请求了注意

每当中断发生时,CPU都需要执行一个处理程序,它基本上是一个处理中断的子程序。现在CPU如何访问这个处理器取决于中断的类型

在向量中断的情况下,向量号指定处理程序的地址,因此CPU跳转到该地址并执行处理程序


另一方面,非矢量化中断通常由I/O(慢速)设备引发。在这种情况下,始终需要执行特定的处理程序,因此不需要传递处理程序地址的向量。当外部设备中断CPU(中断请求)时,CPU必须执行中断服务例程来维护该中断。如果处理器的内部控制电路产生对作为中断服务例程的起始地址的预定存储器位置的调用,则该地址称为向量地址,并且这种中断称为向量中断

向量化中断的重要特征是设备本身提供中断向量地址

对于非矢量化中断,所有使用相同中断请求例程的设备将控制转移到相同的位置,中断服务例程将必须确定哪些可能的设备实际上正在中断

通过矢量化中断,设备告诉中断机制其矢量地址是什么。矢量地址对应于OS(或设备驱动程序)已在其中写入适当中断服务例程地址的存储位置。通常,每个设备都有自己的向量地址,因此“哪个设备正在中断”的决定很简单


术语有点混乱,因为中断服务例程地址表经常被称为“中断向量表”,但用于向量化中断(中断设备标识向量中的插槽)和非向量化中断(中断请求行对应向量中的插槽)的术语.

您说“另一方面,非矢量化中断是由I/O设备引发的”——但不是所有中断(矢量化和非矢量化)都是由I/O设备引发的吗?你能澄清一下吗?否则+1表示清楚的前2段!=)对子程序的调用也是一种中断。e、 g.如果您使用任何高级语言编程并调用函数,那么这也是一种中断,是一种矢量化中断,您知道要调用的函数的地址。同一程序中子程序的函数调用指令不是中断,只是普通分支。(除非您谈论的是x86
通过调用门调用far
,否则这是一个系统调用,而不是函数调用)。