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_X86_Device_Drivers - Fatal编程技术网

Assembly 设备驱动程序和中断服务例程

Assembly 设备驱动程序和中断服务例程,assembly,x86,device,drivers,Assembly,X86,Device,Drivers,一个非常基本的问题。我了解到设备驱动程序和中断服务程序只是一些程序或代码。无论何时需要,他们都会被要求执行。 执行意味着CPU正在执行其指令集ISA中的一些指令。那么,这是否意味着设备驱动程序和ISR也是生成所需结果的机器指令 这些程序到底是由什么样的设备驱动程序和中断例程组成的?这样的程序也有数据段、代码段和堆栈段吗 我正在学习x86汇编语言和C。这是一个准确的评估。一个足够复杂的设备驱动程序有一个数据段、代码段和堆栈段。考虑如何从设备获取数据。有两种方法: 投票:我们到了吗?我们到了吗?程

一个非常基本的问题。我了解到设备驱动程序和中断服务程序只是一些程序或代码。无论何时需要,他们都会被要求执行。 执行意味着CPU正在执行其指令集ISA中的一些指令。那么,这是否意味着设备驱动程序和ISR也是生成所需结果的机器指令

这些程序到底是由什么样的设备驱动程序和中断例程组成的?这样的程序也有数据段、代码段和堆栈段吗


我正在学习x86汇编语言和C。

这是一个准确的评估。一个足够复杂的设备驱动程序有一个数据段、代码段和堆栈段。

考虑如何从设备获取数据。有两种方法:

  • 投票:我们到了吗?我们到了吗?程序、操作系统内核、设备驱动程序等等。。。不断询问设备是否有任何新数据
  • 中断:设备告诉CPU它有重要的东西,并中断CPU。CPU执行一个称为中断服务例程的例程来为请求提供服务,然后继续执行中断前正在执行的任何操作
根据您的操作系统(或者没有操作系统,只是裸机),设备驱动程序可以是一个程序,也可以是您的操作系统内核的一个组成部分

一个典型的设备驱动程序会做几件事:识别设备、初始化设备、处理来自设备的中断、处理写入/读取/配置设备的请求


当然,现代CPU倾向于提供保护功能,不允许任意进程访问设备。因此,设备驱动程序将以高权限级别运行,通常作为操作系统内核的一部分,或者在用户空间设备驱动程序的情况下,它将使用内核提供的一些定义良好的接口。

计算机总是从一个例程运行到另一个例程,或者返回到旧例程,从打开到关闭。“这也是真的吗?”索拉布:一般来说是的。在边缘情况下,您的主要应用程序可以是循环中的HLT命令。那么,只有在处理硬件中断请求时,才会发生实际执行。好的所以例程、驱动程序、过程、子例程只是指令块(仅来自ISA)的花哨名称,这些指令块在执行时会产生期望的结果。它们本身没有什么特别之处,只是结果不同。。我这样说对吗?@Saurabh:一个足够复杂的驱动程序包含许多过程/子程序。您可以将其与常规应用程序进行比较。GUI应用程序基于用户输入(例如GUI)调用其许多过程。一个驱动程序根据硬件中断请求调用它的许多程序,明白了吗。。但是,任何驱动程序/子例程都不能做底层ISA之外的事情,这是真的吗?我想先了解一下这个问题的大局。对于任何x86微处理器,所有可执行文件都具有相同的结构—数据、代码、堆栈段,无论代码是我用C语言编译的还是设备驱动程序或任何中断服务例程。对吗?非常感谢。。现在,用什么语言编写这样的设备驱动程序和ISR?汇编语言、C语言还是其他语言?我说这些驱动程序和ISR本身是可执行的,对吗?他们是否有像.exe或.com这样的扩展或一些新的扩展?这取决于操作系统。在Linux上,它们通常用C编写,并编译成一个扩展名为
.ko
的对象文件(内核模块),在运行时链接到内核中。或者它们可能静态链接到内核。此外,用户空间驱动程序是正常的程序,运行时具有足够的权限访问I/O端口或特殊设备文件。