|
0 / 0 / 0
Регистрация: 22.01.2023
Сообщений: 9
|
|
Деление на ноль22.08.2023, 16:03. Показов 1916. Ответов 2
Метки нет (Все метки)
0
|
|
| 22.08.2023, 16:03 | |
|
Ответы с готовыми решениями:
2
Деление знаковых чисел с выводом ошибки "Деление на ноль"
|
|
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
|
|
| 22.08.2023, 18:52 | |
|
http://www.techhelpmanual.com/... rflow.html
Скорее всего, компьютер просто зависнет, если не установлен правильный обработчик INT0 (имеется ввиду реальный режим Intel 8086)
1
|
|
|
Эксперт Hardware
|
||||||||||||||||||||||||||||||||
| 22.08.2023, 22:34 | ||||||||||||||||||||||||||||||||
Сообщение было отмечено Mikl___ как решение
РешениеВсе исключения генерятся самим процессором, как реакция на ошибку в условиях при выполнении инструкций. Далее, по линии INTR (Request) сигнал IRQ об исключении #DF из ЦП поступает на линию(0) контролёра прерываний APIC, который преобразует IRQ в вектор/номер, и передаёт его обратно в ЦП. Сигналом по линии INTA (Acknowledgment) ЦП информирует APIC, что благополучно получил от него этот вектор (подтверждение). А дальше уже интересней.. ЦП имеет регистр IDTR (Interrupt Descriptor Table), в котором должен лежать адрес "таблицы прерываний". В реальном режиме эта таблица известна как IVT (Int Vector Table), а в защищённом IDT - в этих таблицах хранятся адреса обработчиков исключений/прерываний. Получив от APIC вектор, ЦП берёт адрес IVT из своего регистра IDTR, и по вектору передаёт управление соответствующему обработчику. Такой алго обслуживания не зависит от режима работы процессора Real/Protected, и является для них общим.При включении машины, созданием таблицы IVT занимается биос. Он прописывает в IVT векторы только своих обработчиков в диапазоне 00-1Fh, а далее ОС может дополнить IVT своими векторами, начиная с 20h и до FFh (итого 255 макс). После ребута, в регистр IDTR аппаратно кладётся значение нуль, и биос не трогает его. Тогда получается, что IVT в реальном режиме занимает самые нижние адреса физ.памяти 0000-0400h.Таким образом, при ошибке деления на нуль управление передаётся тоже по вектору(0) (так настроен APIC). Если-бы биос не позаботился о заполнении IVT адресами своих обработчиков, то реакцией ЦП на исключение #DF был-бы внутренний сигнал #RESET, т.е. тупик и перезагрузка. Если в момент #DF процессор находился в защищённом режиме РМ, значит его туда кто-то вогнал, и этот "кто-то" - загрузчик ОС. Поскольку код обработчиков биос в IVT 16-битный, то для 32/64-битного РМ они уже не подойдут, и загрузчику ОС приходится создавать новую таблицу IDT, и прописывать в неё свои процедуры обработки. IDT в РМ может находиться где угодно в памяти, лишь-бы её адрес был указан в регистре IDTR. Можно провести в ядерном отладчике WinDbg небольшой эксперимент и посмотреть, как именно организована обработка исключений/прерываний в Win64. Здесь нужно отметить, что векторы в диапазоне 00-1Fh в РМ зарезервированы Intel для исключений, и все осе'писатели должны придерживаться этого правила. Для начала запросим у WinDbg дамп таблицы IDT. В столбце(1) видим номера прерываний INT, в столбце(2) адреса их обработчиков, а первой записью оказалась как-раз "DivideErrorFault":
_KIDTENTRY64 (в доках, записи называются дескрипторами). Сейчас нас интересует запись(0) #DF с адресом обработчика fffff800'02c85f00, и соответственно сама запись будет совпадать с началом таблицы IDT в памяти. Посмотрим на содержимое этой структуры:
fffff800'02c85f00, который можно теперь дизассемблировать командой u - это именно то, как Win (не биос) обрабатывает исключение "Деление на нуль" (фрагмент):
Возьмём к примеру INT-51h из дампа, как сигнал от контролёра клавиатуры i8042: 51: fffffa8002361510 i8042prt+0x2A04 (KINTERRUPT fffffa8002361480)Поскольку его дескриптор лежит не в начале IDT, нужно указать смещение так (в стиле С++):
Состояние потока с отложенным вызовом сохраняется в стеке ядра - это структура "KTRAP_FRAME". Весь инфо-блок об аппаратном запросе заворачивается в основную структуру "KINTERRUPT" - команда отладчика !idt указывает её адрес в скобках. Если запросить содержимое данной структуры, можно обнаружить в ней много интересного:
в хвосте лежит адрес фрейма "TRAP" - он позволяет вернуть прерванный поток к жизни после вызова DPC.
4
|
||||||||||||||||||||||||||||||||
| 22.08.2023, 22:34 | |
|
Помогаю со студенческими работами здесь
3
Деление на ноль (хотя я не делю на ноль) Деление на ноль - ошибка
Деление на ноль Деление на ноль Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|