phantom-84 писал(а):
Первая же таблица в 20-ой главе.
Так в том-то и дело, что там написано
Код:
16 Floating-Point Error (#MF) Yes Yes Reserved
То есть буквально это означает, что в реальном режиме прерывание 10h происходит в случае Floating Point Error, а не программным образом. То есть оно как бы занято аппаратурой, какого фига оно срабатывает при программном вызова так, как надо?
Но если я правильно понял SII:
SSI писал(а):
Если один и тот же вектор назначен и исключению, и внешнему прерыванию, обработчик может определить причину, посмотрев состояние контроллера прерываний (PIC). У него есть регистр, содержащий установленные биты для тех запросов, которые в данный момент обслуживаются. Естественно, при этом надо гарантировать, что сами обработчики прерываний не могут вызывать исключения с такими разделяемыми номерами -- но это уже задача БИОСописателя.
то это означает, что в BIOS так и сделано: в случае исключения 10h будет исключение, а в случае программного вызова int 10h будет вызов функции BIOS.
Значит, следующим шагом будет смотреть исходники BIOS, чтобы в этом убедиться.Цитата:
Чтобы это понять, достаточно обычного здравого смысла и понимания того, как работает процессор. Например, защита памяти, основанная на сегментах, работает только в защищённом режиме, страничный механизм -- тоже, а значит, соответствующие исключения возникнуть в реальном режиме не могут. А вот деление на 0 -- запросто, поскольку оно не привязано к режиму.
Это я понял, но, занимаясь изучением процессоров Intel, я перестал полагаться на СВОЙ здравый смысл и стараюсь во всём ссылаться на документацию. Я иногда угадываю, что сделали разработчики там-то и там-то, вместо того, чтобы сразу читать документацию, но иногда возникают такие сюжеты, что со зла не придумаешь. Как Вы сами пишите
Цитата:
Что процессоры Интел, что ПК от ИБМ -- это одна сплошная ошибка компьютерной генетики.
С тех пор стараюсь всегда находить точные ссылки.