gs - 4GB code16 - сегмент кода, 16-ти разрядный Код (Text): mov eax,ebx ;code16 mov edi,dword ptr [BaseIDT] shl eax,16 mov edx,8700h ; d = 0 mov ax,offset hand1 mov ecx,20h set_trap_gate: mov dword ptr gs:[edi],eax add edi,4 mov dword ptr gs:[edi],edx add edi,4 add eax,10h ;все обработчики одинакового размера и лежат рядом dec ecx cmp ecx,0 jne set_trap_gate bts edx,8 ;interrupt gate mov ecx,0E0h set_int_gate: ;32 - 255 mov ax,offset handI mov dword ptr gs:[edi],eax add edi,4 mov dword ptr gs:[edi],edx add edi,4 dec ecx cmp ecx,0 jne set_int_gate Для проверки делаю (в 32-х разрядном коде, причем стек от реального режима) Код (Text): mov ax,0 mov bl,0 div bl Прерывание не срабатывает, машина перезагружается.
Что значит "стек от реального режима"? RPL сегмента стека всегда должен быть равен CPL выполняющегося кода, иначе происходит исключение.