将16位c ++内联__asm转换为32位并删除远指针

时间:2014-06-16 01:24:14

标签: c++ assembly x86 inline-assembly x86-16

这是16位c ++编译器中的代码。

//restore interrupt
void CAzimuth::restoreISR()
{
    __asm{
        cli
        mov ax,205h
        mov bl,0fh
        mov cx,seg OldInt
        mov dx,offset OldInt
        int 31h
        sti
   }
}

//install interrupt
void CAzimuth::installISR()
{
    unsigned int u1,u2;
    __asm{
        //access the original vector
        cli
        mov ax,204h
        mov bl,0fh
        int 31h
        mov u1,cx
        mov u2,dx
        sti
    }

    OldInt=(INTPTR)(_MK_FP(u1,u2));

    __asm{
        //fill in new interrupt vector
        cli
        mov ax,205h
        mov bl,0fh
        mov cx,seg NewInt
        mov dx,offset NewInt
        int 31h
        sti
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个古老的DOS保护模式接口系统调用来设置保护模式中断向量。参见例如http://www.delorie.com/djgpp/doc/dpmi/api/310205.html。编译器可能是DJGPP。将其移植到不同的OS和/或运行时系统将需要从头开始重新设计以重新实现DPMI下提供的中断处理程序的任何功能。祝你好运。可能是从简单到近乎不可能的任何事情。