waiyan
驱动牛犊
驱动牛犊
  • 注册日期2003-10-21
  • 最后登录2009-05-21
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1892回复:3

LINUX下调用中断问题

楼主#
更多 发布于:2005-05-11 14:20
在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
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-16 17:35
在dos下,int86只是用c封装了int xx的汇编代码,省去了写汇编代码的麻烦,是实模式的中断处理。
linux是保护模式,与实模式中断处理完全不同。
应该是没有什么函数可以替代。(也许可以看看对v86的支持,这部分代码没有研究过)
不知道你为什么要这么做?
可以考虑,通过int 80来实现,在sys_call_table中增加你的处理函数
sunsetyang
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2007-03-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-25 14:40
其实打没有必要作这种事情。
你看看你在dos下完成该调用完成什么功能,然后找一个通常的LIBC调用替代掉就完了。这些bios中只实现了一些非常基本的东西,现在任何一个OS都能够提供性能更好的调用。如果你要实现在保护模式下调用实模式的调用,那就另当别论了。
[color=red]Optimization[/color] In Progress . . . Welcome to http://mail.ustc.edu.cn/~chyang/
jhbin_1999
驱动牛犊
驱动牛犊
  • 注册日期2005-04-19
  • 最后登录2005-09-12
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-02 21:14
能否给解释一下实模式和保护模式下的中断有什么区别
游客

返回顶部