активируем PM преходом на PM TMP32 segment para public use32 'CODE-32' assume cs:TMP32,ds:TMP32 PM: mov eax,cr0 btr eax,0 ; reset PE flag mov cr0,eax jmp Quit0 Quit0: ; clear prefetch queue db 66h db 0eah dw RealStep,Txt16 ; <- находится в 16-ти битном сегмента, а команды интепретируются как будто в 32 вроде, короче неправильно, но попадает туда куда нужно как это исправить?
Код (Text): use32 ... ; изменяем DS, SS, ... если нужно jmp far RM_SELECTOR:@F ; переходим на 16-ти битный сегмент кода use16 @@: mov eax, cr0 and al, 0xFE mov cr0, eax jmp far 0000h:@F ; изменяем базу CS @@: ... у тебя тут изменяется только база в скрытой части CS, а бит разрядности не изменяется (т. е сегмент кода 32-ух разрядный)
А кто-нибудь делал, какие точно условия необходимо выполнить? У меня падает на возврате из PM32 в PM16 или переходе из реального в PM16. Причем сегменты естественно определены и выхода за предел 0xfffff нету. Может быть так что проблема не в дескрипторах?