сборка — конвертировать 16-битный встроенный __asm ​​c ++ в 32-битный и удалить дальний указатель

вот код в 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
}
}

-4

Решение

Это древний системный вызов интерфейса защищенного режима DOS для установки вектора прерывания защищенного режима. См. Например http://www.delorie.com/djgpp/doc/dpmi/api/310205.html. Компилятор был, вероятно, DJGPP. Портирование этого на другую ОС и / или систему выполнения потребует пересмотра с нуля, чтобы переопределить любую функциональность обработчиков прерываний, предоставляемых в DPMI. Удачи тебе в этом. Может быть что угодно от простого до почти невозможного.

0

Другие решения


По вопросам рекламы [email protected]