Консультация № 71936
21.01.2007, 15:51
0.00 руб.
0 2 2
Здравствуйте уважаемые эксперты. Пытаюсь написать программу переводящую проц в защищенный реж. Должна грузится со второго сектора fdd в нулевой сегмент со смешением 0x7C00h вобщем грузится и до определенного момента работает, момент помечен. Дальше комп просто перегружается. Я не могу понять в чем дело, думаю дескрипторы не правильные, но сделать их правильными не получается. Помогите разобратся. Код программы на NASMе. Спасибо.

Приложение:
code: section .text global startbits 16org 7c00hstart: jmp real_start STRUC dscr;#######################################################limit: RESW 1base_1: RESW 1base_m: RESB 1attr_1: RESB 1attr_2: RESB 1base_h: RESB 1 ENDSTRUC;###############################################################gdt_null: ISTRUC dscrAT limit, DW 0 ; = 0000bAT base_1, DW 0AT base_m, DB 0AT attr_1, DB 0AT attr_2, DB 0AT base_h, DB 0 IENDgdt_code: ISTRUC dscr ;cs = 1000bAT limit, DW 0xFFFFAT base_1, DW 0 AT base_m, DB 0AT attr_1, DB 10011010bAT attr_2, DB 11001111bAT base_h, DB 0 IENDgdt_data: ISTRUC dscr ;ds = 10000bAT limit, DW 0xFFFFAT base_1, DW 0 AT base_m, DB 0AT attr_1, DB 10010010bAT attr_2, DB 11001111bAT base_h, DB 0 IENDgdtlim DW 23gdtaddr DD gdt_nullreal_start: cli in AL,70h ; читаем 70h порт or AL,80h ; ставим восьмой бит out 70h,AL ;ставим на место in AL,92h or AL,2 out 92h,AL lgdt [gdtlim] mov EAX,CR0 or EAX,1 mov CR0,EAX ;здесь точно работает ;дальше не работает db 0EAh ; опкод команды jmp far dd next dw 00001000b next: mov AX,10000b mov FS,AX mov BYTE [FS:0x000B8000],"1"

Обсуждение

давно
Посетитель
7438
7205
22.01.2007, 14:43
общий
это ответ
Здравствуйте, RIV!
Когда-то давно интересовался защищенным режимом
Посмотри мои эксперименты, думаю, на многие вопросы найдешь ответы
Код на Tasm Ideal
Небольшой монитор, который отрабатывает клавиатуру, рисует на
экране, отрабатывает исключения
После метки continue можно убрать ; и получить соответствующее исключение
Запускается из ДОС-а
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
25.01.2007, 10:51
общий
это ответ
Здравствуйте, RIV!
проверьте attr_2, DB 11001111b
гранулярность сегмента(4кб)+режим адресации(32 разряда)
попробуйте код РМ поместить в отдельный 32-разрядный сегмент
Удачи
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа