Очень часто, когда переводится программа в защищенный режим, возникает проблема с IRQ, которые по старинке, находятся по адресам 08-0F для Master и 70-77 для Slave, что совершенно неприемлемо, потому что на векторах 00-1F зарезервированы системные исключения, которые надо тоже как-то обрабатывать. Из-за этого, надо сделать код, который перенаправляет на новые вектора 20-2F. Этот код ниже.
На всякий случай, если включен APIC – более расширенная версия PIC, нужно его отключить в целях совместимости со старым железом, таким как 386 и ниже.
pushax
movecx, 1Bh
rdmsr
andeax, 0xFFFFF7FF
wrmsr
Помимо редиректа, на вход подается AX, 16 бит которые обозначают, разрешены ли прерывания IRQ или нет. Например если установлен бит 0, то разрешен IRQ#0 (Timer).