Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DOS-16 TSR на OpenWatcom С++

2.4K
30 января 2005 года
Николай Коровин
58 / / 13.03.2004
То ли лыжи не едут, то ли я приехал уже...
Пишу сабж. Перевесил прерывание на свой хэндлер. Вызывается исправно.
Как мне в нем посмотреть содержимое регистров, с которыми его вызвали?

__asm
{
mov куданадо,ah
}
if (куданадо==скоканадо) ...

выдает какую-то ерунду (и должно выдавать ерунду, насколько я еще не забыл, там реги пушаются/попаются).

Кто-нибудь, пролечите мой склероз...
991
31 января 2005 года
Zenhipster
157 / / 14.01.2005
А прерывание откуда вызывается? Если параметры передаются через стек, то надо и обращаться к стэку - учитывая при этом, что там уже сидят флаги и адрес возврата.
2.4K
31 января 2005 года
Николай Коровин
58 / / 13.03.2004
Это прерывания DOS (21h и иже), которые вызываются прикладной, не мною писаной программой. Я их перехватываю.
В прерывания BIOS данные точно передаются через регистры, в прерывания DOS -- насколько помню, тоже. АН -- номер службы, ну и так далее...
Watcom вроде их сам куда-то загоняет, чтобы можно было что-то посчитать (исковеркав все реги), а потом восстановить их при вызове _chain_intr(родное). Думаю, их в стеке можно просто отыскать, но недокументированными вещами заниматься не хочется.
991
31 января 2005 года
Zenhipster
157 / / 14.01.2005
Если я правильно понял, прога написана под защищенный режим. Т.е. производится перехват прерывания 0x21, а потом запуск другой проги которая это прерывание юзает?
2.4K
31 января 2005 года
Николай Коровин
58 / / 13.03.2004
Неееее, под реальный %)
DOS-16 :))))))))

Мы перехватываем 21-е и зовем юзерские проги, а они удивляются, что за чудеса вокруг :))
991
31 января 2005 года
Zenhipster
157 / / 14.01.2005
- Тада есть вариант, что пролог функции обработчика сгенеренный компилятором затирает значения нужных регистров. Попробуй описать обработчик целиком на Ассемблере (во внешнем .asm - модуле).
2.4K
31 января 2005 года
Николай Коровин
58 / / 13.03.2004
Дык вот как раз без крови хотелось бы...
Там никакой стандартной структурки хранящей нету?

Тем более -- там _чейн_интр приходится использовать частенько... кстати, никогда его вручную на АЗМе не делал. Там просто восстановить регистры и лонгджампнуть на "родной" адрес надо или как-то похитрее придется?
2.4K
05 февраля 2005 года
Николай Коровин
58 / / 13.03.2004
Блин. Кто сказал, что склероз -- приятная болезнь?

__interrupt kak_ego_tam (union INTPACK PblrucTPbl)
{
if (PblrucTPbl.h.ah==скоканада)...
}

Вообще-то, могли бы и напомнить кто-нибудь. Достаточно элементарная вещь...
Ладно, все, хорошо хоть, не забыл, где можно посмотреть, если забуду :)))
Результ достигнут.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог