通用8086软中断接口

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 int86x()执行中断函数 (通用8086软中断接口函数) 头文件:dos.h 原形:int int86x(int intno,union REGS *inregs,union REGS *outregs,struct SREGS * segregs) 调用方式:int86x(中断号,&输入指针名,&输出指针名,&段寄存器指针名); 注1:需先定义 union REGS 输入指针名,输出指针名;            union REGS 示意图          struct     struct         WORDREGS    BYTEREGS     ┌  ┌───────┬──────┐──┬──  ┐     │  │       │   al   │ 1 byte   │     │  │   ax   ├──────┤──┴─ 2 bytes     │  │       │   ah   │       │     │  ├───────┼──────┤─────  ┘     │  │       │   bl   │     │  │   bx   ├──────┤     │  │       │   bh   │     │  ├───────┼──────┤     │  │       │   cl   │     │  │   cx   ├──────┤     │  │       │   ch   │     │  ├───────┼──────┤     │  │       │   dl   │     │  │   dx   ├──────┤     │  │       │   dh   │  union regs├───────┼──────┤     │  │       │      │     │  │   si   │      │     │  │       │      │     │  ├───────┤      │     │  │       │      │     │  │   di   │      │     │  │       │      │     │  ├───────┤      │     │  │       │      │     │  │  cflag   │      │     │  │       │      │     │  ├───────┤      │     │  │       │      │     │  │  flags   │      │     │  │       │      │     └  └───────┴──────┘       │   x 两个结构变量 h  │       └──  共享同一存储域 ──┘   其中字段flags对应于标志寄存器。字段cflag仅对应于进位标志位,函数在调用时不用该字段,只在返回时设置这个字段,因为许多BIOS服务都是通过进位标置为0还是1来表示成功还是失败。 注2:需先定义 struct SREGS 段寄存器指针名;   结构SREGS定义如下    struct SREGS {unsigned int es,cs,ss,ds}   函数只用了该结构中的段寄存器DS和ES。调用时根据它们的值设置DS和ES,同时把DS和ES原来的值保存在这个结构中,返回时再恢复DS和ES为原来的值,这就允许程序使用远指针或大数据编译模式。   该函数置全局变量_doserrno等于寄存器AX中的值,其返回值也等于AX中的值。 注3:向寄存器传递入口信息   输入指针名.x.寄存器名=要赋的值(入口信息); 注4:调用int86x后得接受出口信息   变量名=输出指针名.x.寄存器名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值