|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
|
[Вопрос] Перехват прерывания прямым доступом к вектору прерывания06.05.2012, 21:01. Показов 9139. Ответов 20
Метки нет (Все метки)
Всех приветствую!
В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание таймера 08h и 1Ch, -//- клавиатуры 09h). Освоил способ с помощью функций 25h и 35h. Но не могу понять, как сделать тоже самое прямой записью (установить и возвратить текущее значение вектора..). Прошу помощи!
0
|
|
| 06.05.2012, 21:01 | |
|
Ответы с готовыми решениями:
20
Вычислить адрес вектора прерывания по номеру прерывания. Перехват прерывания int 09h |
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
| 07.05.2012, 07:07 | |
|
Это задачка очень простая. Вектора прерывания находится в памяти по адресу 0000h:0000h. Вначале идет смещение, затем сегмент. Например, тебе нужно обработчик на 8 прерывание посадить. 8*4(длина элемента) = 20h, то есть по адресу 0000H:0020h находится смещение обработчика прерывания, а по адресу 0000H:0022h - сегмент обработчика. Просто читаешь оттуда начальный адрес, сохраняешь его у себя в резидентной, затем запихиваешь туда адрес своего обработчика и остаешься резидентом. Когда выходишь читаешь из своего буфера, ставишь по адресу исходный адрес и выходишь.
0
|
|
|
650 / 337 / 37
Регистрация: 04.04.2012
Сообщений: 886
|
|
| 07.05.2012, 10:47 | |
|
Немного добавлю. Перед изменением в системной области память, надо запретить аппаратные прерывания командой CLI, а после внесения изменений разрешить - STI. Так надежней будет.
0
|
|
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
| 07.05.2012, 13:54 | |
|
А, ну да, я у Калашникова читал такое про изменение стековых указателей. Это правда, особенно про таймер, потому что таймер может вылететь чертикуда. И непонятно, что будет с ДОСОм. Скорее всего упадет.
0
|
|
|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
||||||
| 07.05.2012, 19:03 [ТС] | ||||||
|
Не по теме: не получилось на готовом примере( Вот код, работает с функциями 35h\25h, но стоит "попытаться" напрямую к вектору обратится, то зацикливается... Может не так обращаюсь. Вот код оригинальной программы (могу и свою с ошибками):
0
|
||||||
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
||
| 08.05.2012, 07:33 | ||
|
Go.D-bq, знаешь почему у тебя виснет. Ты ставь вначале cli и sti после, потому что если кто-то обратится к прерыванию, когда ты меняешь, то пойдет программа непонятно куда. Мой совет - cli перед сменой и sti после смены. Ну а для таймера это просто обязательно. Int 25h и Int 35h блокирует прерывания перед сменой тоже.
1
|
||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|||||||
| 08.05.2012, 10:34 | |||||||
|
ВотЪ, поправил немножко.О_о
1
|
|||||||
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
||||||||||||
| 08.05.2012, 13:53 | ||||||||||||
0
|
||||||||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||
| 08.05.2012, 14:29 | ||
Через замену обработчика напрямую, сохранение старого и т.д. Типа SetVector IntNum, MyHandler и RestoreVector IntNum. Ы?
0
|
||
|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
|
| 08.05.2012, 16:02 [ТС] | |
|
Ребят, благодарю!
Не по теме: сижу вот теперь в отладчик, с листом бумаги и разбираюсь: втолкнул в стек, вытолкнул из стека..:umnik: Код получается снова нагруженный.. Просто я не знаю шаблона для простого написания прерывания.. Части раскиданы по все программе Есть какая-нибудь программа, на которую можно опереться как шаблон? Что-то типа этого не встречали? : процедура (вызов-запрет-цикл выводимого сообщений) - главная часть - EXIT ? ![]() Не по теме: Может просто где натыкались на такое.. А то будет сложно потом знакомым объяснять другим что за функции типа retf или lds своими словами.
0
|
|
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|||||||
| 09.05.2012, 06:25 | |||||||
1
|
|||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||
| 09.05.2012, 08:40 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
||||||
| 12.05.2012, 13:08 [ТС] | ||||||
|
Не по теме: Виноват за долгую задержку в коде ;) Проверьте на правильность, может что лучше заменить-переделать? ![]() Вопрос в шапке указан! Вот сам код! :
0
|
||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||||||
| 12.05.2012, 13:16 | ||||||
|
стр. 29,30 можно заменить на одну:
0
|
||||||
| 12.05.2012, 14:02 [ТС] | |
|
Не по теме: Момент всплыл грустный: программа то отработает нормально, то может с ошибкой.. Перепроверил код - тщетно.
0
|
|
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
| 12.05.2012, 14:09 | |
|
В стр. 68 забыто восстановление старого вектора.
0
|
|
|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
||||||
| 12.05.2012, 14:44 [ТС] | ||||||
|
Понятно. Просто суть была перевести команды:
Не по теме: Исправляю ..
0
|
||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|||||||
| 12.05.2012, 14:57 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 20
|
||||||
| 12.05.2012, 15:05 [ТС] | ||||||
|
Charles Kludge Сделал так:
Не по теме: Сделал сам и вижу ваш код :) Все равно благодарю! :good:
0
|
||||||
|
Клюг
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
| 12.05.2012, 15:14 | |
|
Может, pushf/popf убрать, а вместо popf - sti ? И pop es забыт.
0
|
|
| 12.05.2012, 15:14 | |
|
Помогаю со студенческими работами здесь
20
Перехват прерывания, скроллинг экрана
Глобальный перехват аппаратного прерывания Перехват прерывания жесткого диска Перехватить прерывание int 05h: Первый вызов этого прерывания располагает строки вертикально, следующий «нормально» Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|