Перепрограммирование прерывания в c / asm x86 - PullRequest
4 голосов
/ 11 марта 2012

Моя проблема в том, что я должен перепрограммировать прерывания без использования системных библиотек, таких как dos.h, поэтому я не могу использовать такие функции, как getvect или setvect. Я сделал рабочую программу на C (с asm-вставками), но она использует функции DOS. Как сделать это без dos.h и использовать вместо него asm?

Я думал о том, чтобы записать программу в фиксированное место в памяти и затем изменить адрес в таблице векторов прерываний, но я понятия не имею, как это сделать - особенно эта программа в основном на C.

Я должен перепрограммировать прерывание системных часов и прерывание LPT. Таймер системных часов был ускорен, поэтому каждые несколько раз мне приходилось генерировать исходное прерывание системных часов.

1 Ответ

3 голосов
/ 12 марта 2012

Насколько я помню, таблица прерываний началась в 0000: 0000h.На каждую запись прерывания приходится 4 байта: 2 байта для смещения сегмента 2.

xor ax, ax
mov es, ax

mov bx, interrupt_number
mov ax, cs
mov es[bx*4], ax
mov es[bx*4+2], offset yourSubroutine

Это должно быть примерно так, хотя я не очень точно помню

...