Здравствуйте ) у меня такая проблема- при выполнении кода с листинга скомпилированного nasm`ом при переводе процессора в защищенный режим после дальнего прыжка на первую инструкцию защищенного режима(точку входа) компьютер перезагружается, насколько я понял процессор получает сигнал ресет из-за ...некоректного физического адресса, формируемого при этом ...либо это что-то другое.Уже до паранои дошло)не могу понять в чем дело, посмотрите пожалуйста исходник, укажите в чем ошибка.Кстати какими еще способами переводят процессор в защищенный режим, помимо загрузки селектора far jmp(call и другими передачи управления) ?в рассылке broken sword`a сказано про LCS. Код (Text): org 100h section .text start: ;..........все прерывания запрещены....... ;...A20 in al, 92h or al, 2 out 92h, al ;..запрет всех прерываний cli in al, 70h or al, 80h out 70h, al ; запрет NMI ;.....Загрузка таблицы глобальной в GDTR mov word [GDTR], 0fh ;размер таблицы -1 xor eax, eax mov ax, cs shl eax, 4 add ax, null_desc mov dword [GDTR+2], eax lgdt [GDTR] ;......смещение прыжка xor eax, eax mov ax, cs shl eax, 4 add ax, EntryPoint mov dword [offset_jmp], eax ;........Вкл mov eax, cr0 or ax, 01b mov cr0, eax ;..загрузка cs db 066h ;Насколько я понимаю в 16 битном варианте этой команды(без префикса), передача сработает точно также. db 0EAh offset_jmp dd 0h dw 01000b EntryPoint: hlt section .data null_desc db 00000000000000000h ;............lim....lim...bas...bas..bas....pDPstcwa....gr00LIM....bas code_desc db 0ffh, 0ffh, 000h, 000h, 000h, 010011010b, 011001111b, 000h GDTR dw 0 ;размер dd 0 ;смещение nasm -f bin c:\nasm\k.asm -o c:\nasm\k.com ;параметры компилятору запускал под досом.
можно с помощью iretd. код накорню не верный, чуть позже приведу кусок своего и гляну подробней твой.
на самом деле здесь будет объявлен 1 байт, вместо нужных 8-ми. Надо примерно так Код (Text): null_desc db 0,0,0,0,0,0,0,0 Кажется здесь будет в АХ загружено слово, распологаемое по адресу null_desc, а не смещение null_desc Код (Text): add ax, offset null_desc аналогично. Больше ошибок вроде в глаза не бросается. То, что код не верный накорню - немного погорячился. Я делал по аналогичному алгоритму. Возьми bochs, он имеет встроенный дебагер. Лучшего инструмента для отладки подоных вещей я не знаю. На счет перед этим должен быть настроен соответствующим образом стек. У тебя пока это хозяство отсутствует.
Да уж ...ошибочка) спасибо за внимательность.насчет того что нужно писать offset для для получения значения смещения- это не обязатьльно в насм, только если указать соответствующую директиву.еще раз спасибо) код конечно заработал, тока новая проблема возникла, но это уж я сам.