Попытался я в VM выполнить call dword [ds:bp]. На реальной машине и на Bochs всё нормально, а на VirtualPC возврат куда-то улетает (примерно на 0x50e байт вперёд). Попробовал заменить на push'ы и jmp - всё заработало. Это правда глюк VirtualPC, или я чё-то не понял? PS перед call происходит pushf, соответственно, возврат - с помощью iret
Вообще-то, это колл по адресу dword в памяти при use16 - он не может быть near. Я так вызывал прерывание из таблицы векторов. Кроме того - ведь в Bochs-то и на реальной машине работают.