может так поймет:
еслибы программного исключения "деление на ноль" не существовало бы то raise EDivByZero вызывало бы хардварное исключение а это не так.
Модератор: Модераторы
...Если быть на 100 процентов точным, это не совсем так. Например, в Intel-архитектуре возникновение исключения вызывает передачу управления по вектору в обработчик находящийся в нулевом кольце защиты, т.е. в обработчик режима ядра (kernel mode). Обработчик определен соответствующим исключению элементом таблицы дескрипторов прерываний (она же - Interrupt Descriptor Table, или просто - IDT). Я собираюсь пропустить все, что касается кода уровня ядра, и притвориться, что, при возникновении исключения, CPU передает управление прямо в KiUserExceptionDispatcher...
Лекс Айрин писал(а):почему ВЫ думаете, что это не так?
Mikhail писал(а):Ну а Вам я так скажу так, команда int в защищенном режиме процессора запрещена для непривелигированных программ.
Mikhail писал(а):Я уже молчу о том, что такие вещи в прерываниях никто не реализует.
Mikhail писал(а):Он не думает, он точно знает что это не так.
Лекс Айрин писал(а):она там и не нужна.
Лекс Айрин писал(а):Прерывания (и их обработчики) это преимущественно аварийный клапан и средство проинформировать операционку о некоторых вещах. Как программный интерфейс они использовались в DOS.
Лекс Айрин писал(а):Есть другая информация, и я ей как-то доверяю больше, так как она идет от программеров занимающихся системным программированием. (и просто хакеров)
Лекс Айрин писал(а): Вы не хотите разобраться в вопросе
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c: integer;
begin
a:= 10;
b:= 0;
try
c:= a div b;
except
on E: EDivByZero do
raise EDivByZero.Create('!!!!!!');
end;
ShowMessage(IntToStr(c));
end;
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68