Станислав писал(а):
Мне понравилась статья про прерывания в защищенном режиме
А мне не очень. Шлюз для syscall'а нужно размещать выше входов 0-31. Причем лучше использовать trap-шлюз, а не int-шлюз. Нужно включить в таблицу все 16 входов (для PIC'а) обработчиков прерываний, даже если используются не все. Причем поставить обработчики-заглушки на неиспользуемые входы. Не нужно выполнять манипуляции с Local APIC'ом, если ты не собираешься его использовать. Код для запрета NMI и открытия адресной линии A20 тоже весьма сомнительный.
Теперь по коду:
- перенеси шлюз для syscall'а;
- используй хотя бы repeat/end repeat для описания идентичных шлюзов, раз не строишь таблицу динамически (кстати в fasm'е есть директива dq, т.е. можно писать просто dq 0);
- используй label или = вместо equ;
- если обработчик лежит во flat-сегменте выше отметки 64 кб (минус 1), указывай в шлюзе также и старшее слово адреса (смещения) обработчика;
- выровняй таблицу на 8-байтовую границу.
Для примера моя разметка (для PIC'а):
0-1Fh - исключения и NMI;
20h-2Fh - аппаратные прерывания;
30h-5Fh - резерв для аппаратных прерываний;
60h - syscall;
61h-0FFh - резерв.