Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.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
C 是否可以使用NASM创建自定义中断处理程序?_C_Assembly_X86 64_Nasm_Osdev - Fatal编程技术网

C 是否可以使用NASM创建自定义中断处理程序?

C 是否可以使用NASM创建自定义中断处理程序?,c,assembly,x86-64,nasm,osdev,C,Assembly,X86 64,Nasm,Osdev,我的同事和我正在尝试使用nasm和纯C语言开发一个小型操作系统,而不使用库 因此,如果可能的话,我们想知道如何实现中断。 我试过了,但它没有与NASM组装。(编者按:这是一个16位MASM答案,用于设置实模式IVT条目) 如果可能的话,记录如何实现它或一个简单的例子将非常好。当然可能。但是,中断在64位(即长)模式下的工作方式与您链接的答案中描述的实模式下的工作方式不同。有关如何构建IDT的信息,请参阅,该结构需要为受保护模式和长模式定义中断处理程序。在参考链接中,它们使用c结构,我认为您需要在

我的同事和我正在尝试使用
nasm
和纯C语言开发一个小型操作系统,而不使用库

因此,如果可能的话,我们想知道如何实现中断。 我试过了,但它没有与NASM组装。(编者按:这是一个16位MASM答案,用于设置实模式IVT条目)


如果可能的话,记录如何实现它或一个简单的例子将非常好。

当然可能。但是,中断在64位(即长)模式下的工作方式与您链接的答案中描述的实模式下的工作方式不同。有关如何构建IDT的信息,请参阅,该结构需要为受保护模式和长模式定义中断处理程序。在参考链接中,它们使用c结构,我认为您需要在asm中完成。但是IA-32是32位的,这意味着我必须在32位IDT上定义受保护模式,在长模式下定义另一个32位IDT?另外,你能举一个IDT结构的小例子以及如何使用它吗?在这个阶段,你的操作系统是以16位、32位还是64位模式运行的?中断处理在它们之间是完全不同的,尤其是16位。好吧,因此,您链接的代码对您来说是无用的,即使您要将其调整为nasm语法,因为它是针对16位模式的。这将是开始阅读CPU软件开发人员手册的相关部分的最佳时机,例如第3卷第6章。这是一个更大的话题,在一个如此简单的回答中完全解释是不合理的。