Не работает 12 прерывание в защищенном режиме, я̶ ̶н̶и̶ч̶е̶г̶о̶ ̶н̶е̶ ̶д̶е̶л̶а̶л̶,̶ ̶н̶е̶ ̶у̶м̶е̶ю̶ ̶и̶ ̶н̶е̶ ̶х̶о̶ч̶у̶ ̶у̶ч̶и̶т̶ь̶с̶я̶,̶ ̶н̶о хотелось бы разобраться в чем перемудрил:
Handler0Ch PROC
mov ax, SELECTOR_SPACE
mov es, ax ; В ES теперь селектор, указывающий на все адресное пространство
str ax ; Сохраняем в AX регистр селектор TSS
call GetLinearAddress ; Процедура определяющая линейный адрес и размер сегмента на который указывает данный селектор
; Вход: АХ - селектор
; Выход: EDX - Лин.адрес сегмента
mov al, 12 ; Номер прерывания
mov ebx, 0 ; Код ошибки
jmp PrintInterruptInfo ; Процедура, печатающая информацию о произошедшем прерывании и далее зацикливающаяся.
; Вход: AL - номер прерывания
; CX:EDX - адрес возникновения
; EBX - код ошибки
Handler0Ch ENDP
- GetLinearAddress работает исправно (написаны тесты, все окей)
- PrintInterruptInfo работает исправно (написаны тесты, все окей)
Так вот почему при вызове int 0Ch программа зависает? С другими прерываниями все работает исправно.
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.