General Protection Fault 0x13B

Тема в разделе "WASM.OS.DEVEL", создана пользователем GLEB, 22 ноя 2011.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Всем привет!

    После разрешения прерываний в защищенном режиме возникает исключение общей защиты, код 0x13B.
    Обработчики установлены только для таймера и клавиатуры, остальные прерывания замаскированы.

    Исключение возникает только на ноуте Asus (может еще на каких, пока нет возможности проверить) на дектопах все нормально.

    Возникает 1 раз после sti, дальше все работает нормально. Если замаскировать все прерывания в PIC все равно возникает исключение.

    Выкинул из кода все лишнее, оставил только:

    Код (Text):
    1.    ; enable A20
    2.         in al, 0x92
    3.         or al, 0x2
    4.         out 0x92, al
    5.  
    6.         ; disable interrupts
    7.         cli
    8.         in al, 0x70
    9.         or al, 0x80
    10.         out 0x70, al
    11.  
    12.         ; set interrupt base vector
    13.         mov al, 0x11      ; init
    14.         out 0x20, al
    15.         out 0xA0, al
    16.  
    17.         mov al, 0x20      ; privary
    18.         out 0x21, al
    19.         mov al, 0x28      ; secondary
    20.         out 0xA1, al
    21.  
    22.         mov al, 0x4      
    23.         out 0x21, al
    24.         mov al, 0x2      
    25.         out 0xA1, al
    26.  
    27.         mov al, 0x1      
    28.         out 0x21, al
    29.         out 0xA1, al
    30.  
    31.  
    32.         mov al, 0xFF ;11111000b
    33.         out 0x21, al
    34.  
    35.         mov al, 0xFF
    36.         out 0xA1, al    
    37.  
    38.         ; load GDTR
    39.         lgdt [gdtr]
    40.  
    41.         ; load IDTR
    42.         lidt [pm_idtr]
    43.  
    44.         ; enable protected mode
    45.         mov eax, cr0
    46.         or al, 1
    47.         mov cr0, eax
    48.  
    49.         ; jump to protected mode segment
    50.         jmp PM_CODE_SEG_DESC:pmode_entry
    51.  
    52.  
    53. ; ***************************** PROTECTED MODE CODE **************************** ;
    54. use32
    55.  
    56. pmode_entry:
    57.         ; set data and stack segments
    58.         mov ax, PM_DATA_SEG_DESC
    59.         mov ds, ax
    60.         mov es, ax
    61.         mov fs, ax
    62.         mov gs, ax
    63.         mov ss, ax
    64.         mov esp, STACK
    65.  
    66.         ; enable interrupts
    67.         in  al, 0x70
    68.         and al, 0x7F
    69.         out 0x70, al
    70.  
    71.         sti
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Поставь заглушки на все необрабатываемые прерывания от PIC.
     
  3. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Phantom_84

    Поставил.
    Один раз сразу после разрешения прерываний генерируется IRQ7

    http://ru.wikipedia.org/wiki/Intel_8259

    получается это как раз этот случай?
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Да, похоже на спонтанное прерывание PIC'а.