阅读:1892回复:3
LINUX下调用中断问题
在DOS下以下这个函数,在LINUX中应当是哪个函数可以替代?
如果没有的话,在LINUX下该如何编写该功能的函数呢? 高手们指点下!!! int86()执行中断函数(调用8086软中断函数) 原形:int int86(int intno,union REGS *inregs,union REGS *outregs) 调用方式:int86(中断号,&输入指针名,&输出指针名) 返回值:中断处理结束时的AX寄存器的值,错误时outregs->x.cflag!=0 功能:函数int86() 用来执行指定的8086软中断。首先把输入指针所指的共用体中的内容拷贝到CPU 的寄存器中,随即产生对应的中断,返回后将CPU寄存器(AX)的内容拷贝到输出指针指向的共用体中。在使用int86() 函数进行BIOS接口的系统调用时,有的中断调用设有若干选择项,这些选择项可以根据调用时AH寄存器中的值来进行访问。 注:1.需先定义 union REGS 输入指针名,输出指针名; 2.向寄存器传递入口信息 输入指针名.x.寄存器名=要赋的值(入口信息); 3.调用int86后得接受出口信息 变量名=输出指针名.x.寄存器名 4.REGS的定义(在dos.h中): struct WORDREGS{unsigned int ax, bx, cx, dx, si, di, cflag, flags;} struct BYTEREGS{unsigned char al, ah, bl, bh, cl, ch, dl, dh;} union REGS{struct WORDREGS x;struct BYTEREGS h;} 头文件:dos.h |
|
沙发#
发布于:2005-05-16 17:35
在dos下,int86只是用c封装了int xx的汇编代码,省去了写汇编代码的麻烦,是实模式的中断处理。
linux是保护模式,与实模式中断处理完全不同。 应该是没有什么函数可以替代。(也许可以看看对v86的支持,这部分代码没有研究过) 不知道你为什么要这么做? 可以考虑,通过int 80来实现,在sys_call_table中增加你的处理函数 |
|
板凳#
发布于:2005-05-25 14:40
其实打没有必要作这种事情。
你看看你在dos下完成该调用完成什么功能,然后找一个通常的LIBC调用替代掉就完了。这些bios中只实现了一些非常基本的东西,现在任何一个OS都能够提供性能更好的调用。如果你要实现在保护模式下调用实模式的调用,那就另当别论了。 |
|
|
地板#
发布于:2005-07-02 21:14
能否给解释一下实模式和保护模式下的中断有什么区别
|
|