Проблемы с IDT

Тема в разделе "WASM.OS.DEVEL", создана пользователем NoName, 3 июл 2007.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    gs - 4GB
    code16 - сегмент кода, 16-ти разрядный

    Код (Text):
    1.     mov eax,ebx ;code16
    2.     mov edi,dword ptr [BaseIDT]
    3.     shl eax,16
    4.     mov edx,8700h ; d = 0
    5.  
    6.     mov ax,offset hand1
    7.     mov ecx,20h
    8. set_trap_gate:
    9.     mov dword ptr gs:[edi],eax
    10.     add edi,4
    11.     mov dword ptr gs:[edi],edx
    12.     add edi,4
    13.     add eax,10h ;все обработчики одинакового размера и лежат рядом
    14.     dec ecx
    15.     cmp ecx,0
    16.     jne set_trap_gate
    17.  
    18.     bts edx,8 ;interrupt gate
    19.     mov ecx,0E0h
    20. set_int_gate: ;32 - 255
    21.     mov ax,offset handI
    22.     mov dword ptr gs:[edi],eax
    23.     add edi,4
    24.     mov dword ptr gs:[edi],edx
    25.     add edi,4
    26.     dec ecx
    27.     cmp ecx,0
    28.     jne set_int_gate
    Для проверки делаю (в 32-х разрядном коде, причем стек от реального режима)
    Код (Text):
    1. mov ax,0
    2. mov bl,0
    3. div bl
    Прерывание не срабатывает, машина перезагружается.
     
  2. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    bts не меняет edx
    + напиши весь код
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Что значит "стек от реального режима"? RPL сегмента стека всегда должен быть равен CPL выполняющегося кода, иначе происходит исключение.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Вероятно, исключение возникает. Обработчики поставь свои.