#GP на некоторых ISR, APIC и PIT не отправляют IRQ

Я работал над кодом для проверки скорости APIC с помощью PIT. Есть несколько проблем, которые я не могу понять. Во-первых, при тестировании ISR для двух таймеров я получаю общие ошибки защиты в инструкциях iretq. Во-вторых, ни один из таймеров фактически не запускает никаких прерываний. Любая помощь в этом будет высоко оценена.

Ссылка на соответствующий файл.


person Jenifer De Jager    schedule 19.02.2019    source источник
comment
Вероятно, это не ваша проблема, но это выглядит подозрительно: pop rdx pop rax mov rax, ckpoint call print iretq . Кажется, вы восстанавливаете RAX и RDX, но затем вы забиваете RAX с помощью ckpoint, а затем вызываете printf. Похоже, вы как минимум выкинули RAX, не зная, что printf выбрасывает, прежде чем вернуться с iretq . Это то, что вы намеревались?   -  person Michael Petch    schedule 19.02.2019
comment
Это код, который проверяет, куда он попадает. #GP происходит независимо от того, есть контрольная точка или нет. Однако ckpoint печатается, поэтому я знаю, что он не работает на iretq.   -  person Jenifer De Jager    schedule 19.02.2019
comment
Я бы помог, если бы вы больше прокомментировали свой код: я не помню все регистры APIC по смещениям, и мне не ясно, что вы синхронизируете.   -  person Margaret Bloom    schedule 19.02.2019


Ответы (1)


Общие сбои защиты были вызваны наличием недопустимого регистра CS из-за того, что регистр CS не перезагружался после загрузки GDT. Этого нет в коде, на который я ссылался вообще.

person Jenifer De Jager    schedule 21.02.2019